[英]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
声明为interface
或type
但是您将无法在运行时使用instanceof
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.