Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 是否可以将T型约束为包含K的子类型,但不包含K的子类型?_Typescript_Typescript Generics - Fatal编程技术网

Typescript 是否可以将T型约束为包含K的子类型,但不包含K的子类型?

Typescript 是否可以将T型约束为包含K的子类型,但不包含K的子类型?,typescript,typescript-generics,Typescript,Typescript Generics,是否可以将泛型T约束到不包括K的K类型的子类型集合?我试图为基于继承的mixin函数定义一个类型。提供了一个相反的答案,巧合的是,这个问题被问到了,但在评论中没有回答 “typeof MixinOne”可分配给“T”类型的约束, 但是可以使用约束“IConstructor”的不同子类型实例化“T” 或者,下面解决了错误,但包括K,尽管使用了extends export type Mixin = (Base: IConstructor) => IConstructor; 我对mixin的属

是否可以将泛型T约束到不包括K的K类型的子类型集合?我试图为基于继承的mixin函数定义一个类型。提供了一个相反的答案,巧合的是,这个问题被问到了,但在评论中没有回答

“typeof MixinOne”可分配给“T”类型的约束, 但是可以使用约束“IConstructor”的不同子类型实例化“T”

或者,下面解决了错误,但包括K,尽管使用了extends

export type Mixin = (Base: IConstructor) => IConstructor;
我对mixin的属性迭代解决方案不感兴趣,因为这些类需要依赖项注入。

以下是我的解决方案:


类型requiresbtype

是的,我认为类型strictextens=U;,这是相似的。。。但我不知道这个问题打算如何在Mixin中使用它,因为该类型的计算结果是一个函数,它可以接受任何构造函数并生成调用方选择的该构造函数的任何子类型,这是不可能的,或者至少是不安全的,并且似乎不是OP的意思。我认为泛型应该在mix上,而不是Mixin类型上。子类型看起来像是在转移注意力here@jcalz这是一个很好的观察结果,当然,我遗漏了一件事。Mix通常接受具有相同构造函数签名的mixin。因此,我将IConstructor用于Mixin类型定义,但在实践中对其进行了扩展。我更新了问题以澄清。我认为a在这里会很有用;具体来说,它明确显示了一些应该成功的混合调用和其他应该失败的调用。现在我看到的是mixinone,它可以在很多方面得到满足,我不清楚K应该扮演什么角色。注意,K通常用于表示类似于keyof T的键类型;对于一般类型,我会改为U。例如,可以工作,但没有更多的混合测试用例,我不确定这是否足够。@jcalz我用一个例子更新了这个问题。看看你的,在第4行我没有扩展数组。我正在扩展每个mixin类以生成一个混合的最终类。这就是我在Mixin上定义泛型的原因。extends数组只是表示mix函数接受Mixin类型的泛型数组的rest参数,而不是表示要混合到数组中。不管怎么说,根据您更新的示例,是否适用于您?如果是的话,我会写下来的。
const LocalizedBase: IBase = mix(mixinOne, ...);
export type Mixin = (Base: IConstructor) => IConstructor;