我找不到另一个问这个的问题。我试图创建一个类型防护,它将确定特定变量的类型。使用单数类型很简单。
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
以返回A
或Readonly<A>
(或其他包装类型)?
答案 0 :(得分:0)
我可以肯定的是,发布此信息后我很快就找到了自己的答案。
const isA = <T>(value: T): value is T => value.type === 'A';