1

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

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 类型

4

2 回答 2

2

Typescript 有一个结构化的类型系统。这意味着如果您定义class A { x: number = 1; },那么即使对象字面{x: 1}A不是像new A().

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

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

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

于 2020-02-12T16:03:57.863 回答
1

如果你想要一个GraphData类的实例,那么你必须使用new运算符:

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

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

于 2020-02-12T14:36:21.347 回答