繁体   English   中英

打字稿类型在传播后丢失

[英]Typescript type lost after spreading

可能我在这里遗漏了一些明显的东西,但为什么这不起作用?

this.props.entity绝对是 GraphData 类型,delta 中的属性在 GraphData 上有效。

    const newEntity: GraphData = {...this.props.entity, ...delta } as GraphData;
    if(newEntity instanceof GraphData) {
        console.log('Yay');
    }

即使这不起作用

    const newEntity: GraphData = {...this.props.entity } as GraphData;
    if(newEntity instanceof GraphData) {
        console.log('Yay');
    }

newEntity 始终是 Object 类型

Typescript 有一个结构类型系统 这意味着如果您定义class A { x: number = 1; } class A { x: number = 1; } ,则该对象字面{x: 1}是类型的A即使它不是等构成new A()

但是, instanceof是 Javascript,因此它在 Typescript 中具有与在 Javascript 中相同的语义:

instanceof运算符测试构造函数的prototype属性是否出现在对象原型链中的任何位置。

因此,由于对象字面量{x: 1}在其原型链中没有A.prototype ,因此{x: 1} instanceof A是假的。 也就是说, instanceof测试对象是否在 Typescript 中具有特定类型。

如果您想要GraphData类的实例,则必须使用new运算符:

const newEntity = new GraphData(/* ... */);

或者,您可以将GraphData声明为interfacetype但是您将无法在运行时使用instanceof

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM