小编cha*_*iik的帖子

打字稿类型谓词导致从不

以下打字稿片段在严格模式下重现(编译器)问题,编译后的代码运行良好:

class ClassX
{
    constructor(public label: string) {}
}

class ClassA extends ClassX
{
    constructor() { super('A'); }
}

class ClassB extends ClassX
{
    constructor() { super('B'); }
}

type TClass = ClassA | ClassB;

class Wrapper<T extends TClass>
{
    constructor(public source: TClass)
    {
        if(Wrapper.IsB(this)) console.log(this.source.label);

        // Works normally:
        // if(source instanceof ClassA) this.Log();
        // else if(source instanceof ClassB) this.Log();

        if(Wrapper.IsA(this)) console.log(this.source.label);
        // this results in 'never', would emit error TS2339 without the type guard
        else if(Wrapper.IsB(this)) console.log((this as Wrapper<ClassB>).source.label); …
Run Code Online (Sandbox Code Playgroud)

predicate instanceof typescript

3
推荐指数
1
解决办法
302
查看次数

标签 统计

instanceof ×1

predicate ×1

typescript ×1