我正在尝试使用Object
关键字将as
强制转换为类,但是当我检查它是否为类的实例时,它返回false。有人可以解释为什么会这样,是否有人被强制转换为类并检查它是否是该类的实例?
示例代码:
class A {
id: string;
constructor(id: string) {
this.id = id
}
}
const a = { id: '1' } as A
const b = new A('1')
console.log(a instanceof A); // false
console.log(b instanceof A) // true
答案 0 :(得分:1)
类型在运行时中不存在。因此a
是一个对象,而不是A类的实例。
答案 1 :(得分:1)
as
表示您希望object
是类的实例。在Java或C#中,您可以将A a = s as A
放在s
必须是A的超类的地方。不能将其放在A a = s as B
上。
正如您所说的,{ id: '1' }
是类Object
的实例。您提供的A
是一个自定义类,其中包含字段id
。 new A('1')
给出了A
的实例。
为什么变量a
不是A
的实例?您发现a
与您分配给new A('1')
的{{1}}具有相同的形状。
只是形状。形状什么都不是!您应该注意如何创建b
和a
。
b
等效于a = { id: '1' }
。 a = new Object(); a.id = '1'
是a
,而不是Object
。