All*_*ine 1 types inference typescript
TypeScript是否可以从静态函数推断返回类型.例如,如果我有一个静态User.fromId()函数,它将返回一个User对象.但我想通过另一个函数(称之为builder)传递它- 例如:
builder(User.fromId, values);
Run Code Online (Sandbox Code Playgroud)
其中builder定义为:
function builder( construct: Function, values: any ) {
var inst = construct();
// set values
return inst;
}
Run Code Online (Sandbox Code Playgroud)
我如何让TypeScript"知道" builder将返回a User而不User作为泛型传递?也许它可以,但使用Function第一个参数的类型是问题?如果是这样,可以在没有泛型的情况下完成推理,我知道我可以使用它来定义返回类型(但感觉多余).
谢谢!
如果使用泛型类型参数和相应的函数签名,Typescript将正确推断类型
class User {
static fromId(id: number): User{
return new User()
}
}
function builder<T>(construct: (id:number) => T, values: any) {
var inst = construct(values);
// set values
return inst;
}
let u = builder(User.fromId, 0); //User
Run Code Online (Sandbox Code Playgroud)
如有必要,我们甚至可以推断出参数类型
function builder<T, TId>(construct: (id:TId) => T, values: TId) {
var inst = construct(values);
// set values
return inst;
}
let u = builder(User.fromId, 0);
let u2 = builder(User.fromId, '0'); // error
Run Code Online (Sandbox Code Playgroud)
如果构造函数有更多参数,我们甚至可以根据需要推断那些参数,使用休息参数中的元组
class User {
static fromId(id: number, name: string): User{
return new User()
}
}
function builder<T, TArgs extends any[]>(construct: (...a:TArgs) => T, ...values: TArgs) {
var inst = construct(...values);
// set values
return inst;
}
let u = builder(User.fromId, 0, '');
let u2 = builder(User.fromId, '0'); // error
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |