gpt4 book ai didi

带有泛型和部分的类的 typescript 错误

转载 作者:搜寻专家 更新时间:2023-10-30 21:36:25 24 4
gpt4 key购买 nike

我在对通用类型使用部分时遇到问题:

interface HasName {
name: string;
}

class Tools<T extends HasName> {
public create: (params: Partial<T>) => T;
createWithName = (nameArg: string) => {
this.create({ name: nameArg })
}
}

我希望这个例子能够工作,因为 T extends HasName应该确保 T会有一个 name领域,和(params: Partial<T>)应将任何对象与 T 的键的任何子集匹配.

然而,在this.create({ name: nameArg })行出现typescript编译错误:

Argument of type '{ name: string; }' is not assignable to parameter of type 'Partial'.

谁能帮我理解为什么{ name: string }不可分配给 Partial<T> ,什么时候应该根据我上面的逻辑?

提前谢谢你。

最佳答案

简而言之,TypeScript 是正确的,但只要您谨慎使用T 的内容即可。 ,你应该可以通过强制转换来消除错误:

this.create({ name: nameArg } as Partial<T>)

至于为什么 TypeScript 在这里,是因为您可以创建扩展 HasName 的类型但为此{name: string}不是该类型的有效对象。

最简单的例子就是创建一个 name 的类型比 string 更具体:

interface HasSpecificName extends HasName {
name: "alice" | "bob";
}

在这种情况下,{name: nameArg}其中 nameArg是否有任何字符串不可分配给 Partial<HasSpecificName>string不可分配给 "alice" | "bob" .

关于带有泛型和部分的类的 typescript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51110424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com