TypeScript检查实例类通过用户定义的类型保护

时间:2017-11-29 22:14:56

标签: typescript

好吧,我已经实现了isInstanceOfClass函数,以便它可以判断实例是否是给定类的实例,现在我需要为它编写正确的类型。

class Parent {
    isInstanceOfClass<T>(arg: T): this is T {
        // already implemented
    }
}

class FooClass extends Parent {
    foo: number;
}

class BarClass extends Parent {
    bar: number;
}

示例:

let foo: Parent;
if(foo.isInstanceOfClass(FooClass)) {
    foo.foo = 1; // TS2339: Property 'foo' does not exist on type 'Parent & typeof FooClass'.
}

有人可以帮助我摆脱错误吗?

由于各种原因,我只能更改isInstanceOfClass方法签名,而不是示例代码。

1 个答案:

答案 0 :(得分:2)

你快到了!
它应该是:

class Parent {
    isInstanceOfClass<T>(arg: { new(): T }): this is T {
        // already implemented
    }
}

不同之处在于,您传递给isInstanceOfClass的不是实例,而是课程 一旦你将它改为类(构造函数),那么错误就会消失。