我的代码是:
export interface TreeItem {
id: string;
children: this[];
collapsed?: boolean;
}
const createTreeItem = <T extends TreeItem>(): T => {
return {
id: 'root',
children: []
}
}
但是我在createTreeItem的返回类型上得到了一个错误,如下所示:
TS2322:Type{id:string;children:never[];}'不可分配给类型“T”。
我完全不知道这意味着什么。
有什么帮助吗?
您可以在返回后添加“as T”:
const createTreeItem=():T=
假设您按如下方式调用函数:
html" target="_blank">js prettyprint-override">let node = createTreeItem<TreeItem>()
很好,对吗?返回类型T是TreeItem,泛型函数硬编码返回的对象实际上有一个类型将其限定为TreeItem:
{ id: string; children: never[]; }
但是给你的函数一个类型参数的目的是允许它被其他类型的T
调用,只要它们扩展TreeItem
。所以下面应该是一个合法的调用:
export interface BidiTreeItem {
id: string;
children: this[];
parent: this;
collapsed?: boolean;
}
let node = createTreeItem<BidiTreeItem>()
该调用是合法的,因为BidiTreeItem满足约束T扩展TreeItem。正如在函数定义中声明的那样,此调用的返回类型是BidiTreeItem,但函数返回的不是BidiTreeItem。
如果您再次阅读错误消息,但记住了上面的示例,那么现在对您来说就有意义了。但为了以防万一,下面我将翻译每一条错误消息。请注意,第一句是结论,因此在本表中它将排在最后:
如果我要创建一个类,并且该类只接受特定类型的数据。我将继续使用泛型,在这个类中,我将继续将类型约束到Number类的上界。 因此,这个类只能使用Number类的类型或Number的子类(整型、双型、长型等)。 现在假设我有一个这些类型的数组,我希望比较数组中的值。所以这个类只包含这些允许的数据类型的数组,我们希望只比较这些类型。 我们可以通过使用包含compareTo方法的comparable接口
泛型的类型约束 swapTwoValues(_:_:)函数和Stack类型可以用于任意类型. 但是, 有时在用于泛型函数的类型和泛型类型上, 强制其遵循特定的类型约束很有用. 类型约束指出一个类型形式参数必须继承自特定类, 或者遵循一个特定的协议、组合协议. 例如, Swift的Dictionary类型在可以用于字典中键的类型上设置了一个限制. 如字典中描述的一样,字典键的类型必须是可哈希的. 也
销关节 cpPinJoint *cpPinJointAlloc(void) cpPinJoint *cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchr1, cpVect anchr2) cpConstraint *cpPinJointNew(cpBody *a, cpBody *b, cpVect anchr1,
可能重复: 是否可能将可空类型作为泛型参数? 我遇到了一个关于泛型类型约束的非常奇怪的事情。我有一门课是这样的: 但是,我发现我不能像预期的那样使用null类型: 我得到一个错误,必须是引用类型。Nullable真的只是一个语法糖的结构,使其看起来像引用类型吗?
本文向大家介绍PHP类型约束用法示例,包括了PHP类型约束用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP类型约束用法。分享给大家供大家参考,具体如下: 在强类型语言中,类型约束是语法上的要求,即定义一个变量的时候,必须指定类型,并以后也只能存储该类型数据; php是弱类型,其特点是无需为变量指定类型,而且在其后也可以存储任何类型,不过在php的新语法中,在某些特定场合,针对
我有一系列复杂的类型级别函数,它们的计算结果如下: 显然,在这种情况下,这个表达式是一个。更一般地说,我们可以说: 有没有办法教GHC推断这一点? 编辑:@chi指出,在某些情况下,GADT可以解决这一问题,但我的特殊情况是: 然后 不能被访问,但是也许GHC应该能够推断出