A request requests different interfaces according to different input values, and returns different return values. code show as below:
enum E {
A,
B,
C,
}
interface Fn {
(arg: E.A): Number;
(arg: E.B): String;
(arg: E.C): null;
}
const fn: Fn = (arg: E) => {
switch (arg) {
case E.A:
return 1;
case E.B:
return '1';
default:
return null;
}
};
It can be inferred correctly when used, but getSelectList reports an error message:
const fn: Fn
'fn' is declared but its value is never read.ts(6133)
Type '(arg: E) => 1 | "1" | null' is not assignable to type 'Fn'.
Type 'string | number | null' is not assignable to type 'Number'.
Type 'null' is not assignable to type 'Number'.ts(2322)
seem like thishttps://github.com/microsoft/TypeScript/issues/33014
enum E {
A,
B,
C,
}
type FF<A extends E> = A extends E.A
? Number
: A extends E.B
? String
: null;
const fn = <A extends E>(arg: A): FF<A> => {
switch (arg) {
case E.A:
// error: Type '1' is not assignable to type 'FF<A>'
return 1;
case E.B:
return '1';
default:
return null;
}
};
fn(E.A);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…