typescript 在if语句中使用类型保护时,类型推断是否中断

ktca8awb  于 2023-03-13  发布在  TypeScript
关注(0)|答案(1)|浏览(108)

代码如下:

export type Writable<T> = {
    -readonly [K in keyof T]: T[K];
};

class Foo {
    readonly foo = 'foo';
}

class Bar {
    readonly bar = 'bar';
}

type WritableFooBar = Writable<Foo | Bar>;

declare function isFoo(obj: any): obj is Foo;

function test(foobar: WritableFooBar): void {
    if (!isFoo(foobar)) {} // happens also with if(isFoo())

    foobar
    // ^? Foo | Writable<Bar>
}

在这种情况下,类型推断是被破坏了,还是我遗漏了什么?
Playground

x9ybnkn6

x9ybnkn61#

这实际上是4.8中出现的回归,在5.0中得到了修复。

相关问题