首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >协变自指类型

协变自指类型
EN

Stack Overflow用户
提问于 2017-10-07 00:47:18
回答 1查看 43关注 0票数 1

我正在尝试构建一个正确的类型

代码语言:javascript
复制
class BinaryNode<N extends BinaryNode<N>> {
    constructor(left?: N, right?: N) {}
}

class A extends BinaryNode<A> { }
class B extends BinaryNode<B> { }


const leafA = new A();
const leafB = new B();
const rootA = new A(leafA, leafB);

问题是,这是编译。我不认为它应该:A承包商应该采取两个(或更少)作为,没有其他。

更重要的是,我该怎么做?我希望结果是由编译器强制执行的As同构树。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-07 00:59:24

TypeScript型系统为构造性。这意味着,对于打字,您的AB类是相同的。如果您使它们不同,您将得到错误:

代码语言:javascript
复制
class BinaryNode<N extends BinaryNode<N>> {
    constructor(left?: N, right?: N) {}
}

class A extends BinaryNode<A> { a: string }
class B extends BinaryNode<B> { b: string }


const leafA = new A();
const leafB = new B();
const rootA = new A(leafA, leafB);  // Argument of type 'B' is not
                                   // assignable to parameter of type 'A'.
                                  //  Property 'a' is missing in type 'B'.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46615635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档