使用条件类型作为 return 类型不能正常工作
Use conditional type as return type doesn't work correctly
我想根据函数的输入参数类型得到一个字符串toTypeString
如下:
function toTypeString<T extends string | number>(x: T): T extends string ? "S" : T extends number ? "N": never {
if (typeof x === 'string') return 'S';
if (typeof x === 'number') return 'N';
throw new Error(`unexpected value: ${x}`);
}
有效,但编译时出现以下错误:
Type '"S"' is not assignable to type 'T extends string ? "S" : T extends number ? "N" : never'.
Type '"N"' is not assignable to type 'T extends string ? "S" : T extends number ? "N" : never'.
我该如何解决这个错误?
我会在这里使用函数重载:
function toTypeString<T extends string | number>(x: T): T extends string ? "S" : T extends number ? "N": never
function toTypeString(x: string | number): "S" | "N" {
if (typeof x === 'string') return 'S';
if (typeof x === 'number') return 'N';
throw new Error(`unexpected value: ${x}`);
}
我想根据函数的输入参数类型得到一个字符串toTypeString
如下:
function toTypeString<T extends string | number>(x: T): T extends string ? "S" : T extends number ? "N": never {
if (typeof x === 'string') return 'S';
if (typeof x === 'number') return 'N';
throw new Error(`unexpected value: ${x}`);
}
有效,但编译时出现以下错误:
Type '"S"' is not assignable to type 'T extends string ? "S" : T extends number ? "N" : never'.
Type '"N"' is not assignable to type 'T extends string ? "S" : T extends number ? "N" : never'.
我该如何解决这个错误?
我会在这里使用函数重载:
function toTypeString<T extends string | number>(x: T): T extends string ? "S" : T extends number ? "N": never
function toTypeString(x: string | number): "S" | "N" {
if (typeof x === 'string') return 'S';
if (typeof x === 'number') return 'N';
throw new Error(`unexpected value: ${x}`);
}