typescript - 输入 'ClassA<{ id: number; 名称:字符串;}>' 不可分配给类型 'ClassA>'
问题描述
我有一个 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>
。
连线的事情是它可以在打字稿操场上与一个缩小的例子一起使用..但在我的框架中却不行
这是实际问题: https ://github.com/agile-ts/agile/issues/76
谢谢
解决方案
它是固定在这个操场上还是你的意思是别的?如果它如此简单,那么不提供一个最小的可重复示例是一种耻辱,因为如果人们可以在那里看到错误,他们就可以投入其中。我不得不做很多想象你的意思。无论如何,下面没有编译错误。
class ClassA<T, V extends Record<string,T> = Record<string,T>> {
constructor(readonly value:V){}
}
type NonArrayType<T> = T extends ClassA<infer U> ? U[] : never;
// Test function to test the 'NonArrayType' type
export function useWithoutArray<T,X extends ClassA<T>>(
deps: X
): NonArrayType<X> {
return '' as any; // Doesn't matter
}
// Drops type error
const test6 = useWithoutArray(new ClassA<any, { id: number; name: string }>({id:3,name:"john"}));
推荐阅读
- python - 如何在 Django Rest Framework 中不转义字符
- android - 在 Android 中使用 JobScheduler 调度任务会导致 UI 在应用启动时冻结
- regex - Pharo 中实现了什么样的正则表达式匹配?
- firebase - 我需要更改请求才能访问新的 Firestore 安全规则
- powerbi - PowerBI 记录更改
- python - 常用表达
- python - Numpy替换for循环以分别计算单个点和多个不同点之间的距离
- bash - 使用 bash 将数组中的数据添加到文件中的新列
- laravel - 在Cpanel中连接数据库的问题
- java - 如何使用 xpath 从 DOM 中的节点获取特定文本