syd*_*ydd 5 typescript typescript-generics
我正在尝试输入一个函数,如果输入参数是数组类型,则该函数应返回数组类型,否则返回普通参数。这是我的尝试:
function test<T extends number|number[]>(a: T):T extends number[] ? string[] : string {
if (Array.isArray(a)) {
return ['123', '45']
}
return '123'
}
Run Code Online (Sandbox Code Playgroud)
我在返回语句中收到错误:Type 'string' is not assignable to type 'T extends number[] ? string[] : string'.
我正在寻找的是以下内容:
const a = test(3) // "a" is string type
const b = test([1,2,3]) // "b" is string[] type
Run Code Online (Sandbox Code Playgroud)
基于此, Typescript 不会根据函数中的类型保护推断出不同的返回类型。但是您可以像这样定义多个函数签名:
function test(a: number): string;
function test(a: number[]): string[];
function test<T extends number|number[]>(a: T): string | string[]{
if (Array.isArray(a)) {
return ['123', '45']
}
let str = '123'
return str;
}
const a = test(3) //string
const b = test([1,2,3]) //string[]
Run Code Online (Sandbox Code Playgroud)
另请参阅此问题:https ://github.com/microsoft/TypeScript/issues/24929
| 归档时间: |
|
| 查看次数: |
1425 次 |
| 最近记录: |