强制转换对象并检查它是否为强制转换类的实例

时间:2020-05-21 12:08:59

标签: typescript

我正在尝试使用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

2 个答案:

答案 0 :(得分:1)

类型在运行时中不存在。因此a是一个对象,而不是A类的实例。

Play ground

处查看已编译的javascript代码。

答案 1 :(得分:1)

TS中的

as表示您希望object是类的实例。在Java或C#中,您可以将A a = s as A放在s必须是A的超类的地方。不能将其放在A a = s as B上。

正如您所说的,{ id: '1' }是类Object的实例。您提供的A是一个自定义类,其中包含字段idnew A('1')给出了A的实例。

为什么变量a不是A的实例?您发现a与您分配给new A('1')的{​​{1}}具有相同的形状。

只是形状。形状什么都不是!您应该注意如何创建ba

b等效于a = { id: '1' }a = new Object(); a.id = '1'a,而不是Object