interface TreeRaw {
ID: string;
parentID: string;
seq: number;
[props: string]: any;
}
class Tree<T extends TreeRaw = TreeRaw> {
data: T[];
constructor(rawData: T[]) {
this.data = rawData;
}
const tree = new Tree([]);为什么实例树推断Tree<never>而不是Tree<TreeRaw>
当我没有输入泛型时,我可以做些什么来获得实例推断Tree<TreeRaw>?
发布于 2021-07-28 15:28:54
因为默认情况下,始终将空数组推断为never[]。这是因为TS不知道您想要的是数字数组、字符串数组还是任何其他数组类型。
如果你想正确地推断它,你应该提供明确的泛型参数。
interface TreeRaw {
ID: string;
parentID: string;
seq: number;
[props: string]: any;
}
class Tree<T extends TreeRaw = TreeRaw> {
data: T[];
constructor(rawData: T[]) {
this.data = rawData;
}
}
// explicit generic argument
const tree = new Tree<TreeRaw>([]);类似的例子:
const set = new Set([]) // Set<never>发布于 2021-07-28 15:18:11
可能是因为不能将空数组([])推断为TreeRaw[]。
这个将会正确地推断出来
const tree = new Tree([] as TreeRaw[]);https://stackoverflow.com/questions/68555855
复制相似问题