具有可选包装类型的打字稿类型防护

时间:2019-05-26 15:14:27

标签: typescript

我找不到另一个问这个的问题。我试图创建一个类型防护,它将确定特定变量的类型。使用单数类型很简单。

type A = { id: number, title: string, type: string };
type B = { id: number, title: string, type: string };
type ABUnion = A | B;

const isA = (value: ABUnion): value is A => value.type === 'A';

但是,在某些情况下,我将这些类型包装在另一个类型中,并且我想维护包装的类型,但是断言所包含的类型就是我想要的类型。

type A = { id: number, title: string, type: string };
type B = { id: number, title: string, type: string };
type ABUnion = A | B | Readonly<A> | Readonly<B>;

const isA = (value: ABUnion): value is A => value.type === 'A';

在这种情况下,即使我将Readonly<A>传递给后卫,我也总是会得到typeofA。我完全希望这会发生。

如何重构isA以返回AReadonly<A>(或其他包装类型)?

1 个答案:

答案 0 :(得分:0)

我可以肯定的是,发布此信息后我很快就找到了自己的答案。

const isA = <T>(value: T): value is T => value.type === 'A';