typescript - Nu se pot suprasolicita funcții cu uniunea tipurilor de funcții


Încerc să creez o uniune de tipuri de funcții cu tipuri de argumente diferite, dar în tipul de uniune argumentul devine 'never'. Aș putea folosi un tip de uniune ca argument și să obțin rezultatul dorit, sau să folosesc suprascrierea funcțiilor, dar dintr-un motiv oarecare uniunea de tipuri de funcții nu este permisă. Iată exemplul de cod:

type FnA = (arg: 'a') => any;
type FnB = (arg: 'b') => any;
type Fn = FnA | FnB;
declare const fn: Fn;
fn('a'); // Argument of type 'string' is not assignable to parameter of type 'never'

Este o eroare sau funcționează așa cum este intenționat?

Răspuns #1

Este intenționat. Dar, pentru a face supraîncărcarea, ar trebui să folosești intersecția & în locul reuniunii |.

Iată codul care funcționează:

type FnA = (arg: 'a') => any;
type FnB = (arg: 'b') => any;
type Fn = FnA & FnB;
declare const fn: Fn;
fn('a'); //  ok