【发布时间】:2021-07-03 08:43:36
【问题描述】:
我有一个 ClassA,它应该只允许对象作为值类型。但是应该可以将您自己的对象类型作为泛型类型传递。通过Record<string, any> 或{ [key: string]: any } 完成。
一切正常。
但是一旦我尝试使用简单的条件类型提取 ClassA 泛型类型。
class ClassA<DataType = Record<string, any>>{
public data: { [key: string]: ClassB<DataType> };
constructor(){
this.data = {};
}
}
type NonArrayType<T> = T extends ClassA<infer U> ? U[] : never;
// Test function to test the 'NonArrayType' type
export function useWithoutArray<X extends ClassA>(
deps: X
): NonArrayType<X> {
return '' as any; // Doesn't matter
}
// Drops type error
const test6 = useWithoutArray(new ClassA<{ id: number; name: string }>());
我得到一个
Type 'ClassA<{ id: number; name: string; }>' is not assignable to type 'ClassA<Record<string, any>>'.
类型错误。在某种程度上它是有道理的,但理论上{ id: number; name: string; } 是Record<string, any>。
连线的事情是它适用于 typescript playground.. 中的缩小示例,但不适用于我的框架
这是实际问题: https://github.com/agile-ts/agile/issues/76
谢谢
【问题讨论】:
-
请分享可重现的代码。收藏?
-
是的 sry .. Collection 我的意思是'classA'
标签: typescript conditional-statements typeerror typescript-generics