old*_*lol 9 typescript typescript-generics
我有一个泛型类图,其中需要包装类型来指定其他类。
interface Data {
id: number,
}
class EntityClass<T extends Data> {
public data;
constructor(data: T) {
this.data = data;
}
}
class Result<T extends Data> {
public data
constructor(data) {
this.data = data;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我正在传递类型 (EntityClass<any>
和内部类型 ( DataClass
) ,即使它总是与any
此处的内容匹配。
function extract<Class extends EntityClass<any>, DataClass extends Data>(
entity: Class
) : Result<DataClass> {}
Run Code Online (Sandbox Code Playgroud)
有没有办法“解开”EntityClass 的内部类型,以避免同时传递两者?这是我想做的:
function extract<Class extends EntityClass<InternalClass>>(
entity: Class
) : Result<InternalClass> {}
Run Code Online (Sandbox Code Playgroud)
Tit*_*mir 10
这是条件类型及其推理行为的基本应用
class EntityClass<T extends Data> {
public data: T; // T assuming this should be T
constructor(data: T) {
this.data = data;
}
}
type GetDataClass<T extends EntityClass<any>> = T extends EntityClass<infer U > ? U: never;
function extract<Class extends EntityClass<any>>(
entity: Class
) : Result<GetDataClass<Class>> { return null as any}
Run Code Online (Sandbox Code Playgroud)
或者您也可以使用类型查询来完成此操作,但这意味着您将被绑定到字段data
,条件类型将根据结构提取通用类型,而无需指定特定字段。
function extract<Class extends EntityClass<any>>(
entity: Class
) : Result<Class['data']> { return null as any}
Run Code Online (Sandbox Code Playgroud)