从可空类型中提取不可空类型定义
Extract not-nullable type definition from nullable type
假设我有以下由外部工具生成的界面:
interface Animals {
turtle: { shellHardness: number };
fox: { whatDidItSay: string } | null;
}
我想定义(摘自 Animals
)乌龟和狐狸的类型,但没有狐狸的 …| null
。乌龟很容易因为没有null:
type Turtle = Animals["turtle"];
可是狐狸怎么办呢?我想象可能有一些 ExtractNullable
类型可以消除可空性:
type Fox = ExtractNullable<Animals, "fox">;
不幸的是,我无法正确定义 ExtractNullable
类型。我尝试了以下方法:
type ExtractNullable<T, K extends keyof T> = T[K] extends null ? never : T[K];
……但是没有用。 TypeScript 操场仍然给我 Fox
类型定义为 type Fox = { whatTheySaid: string; } | null
而不是 type Fox = { whatTheySaid: string; }
这可能吗?我哪里错了?
谢谢
type Fox = NonNullable<Animals["fox"]>;
实施:
/**
* Exclude null and undefined from T
*/
type NonNullable<T> = T extends null | undefined ? never : T;
假设我有以下由外部工具生成的界面:
interface Animals {
turtle: { shellHardness: number };
fox: { whatDidItSay: string } | null;
}
我想定义(摘自 Animals
)乌龟和狐狸的类型,但没有狐狸的 …| null
。乌龟很容易因为没有null:
type Turtle = Animals["turtle"];
可是狐狸怎么办呢?我想象可能有一些 ExtractNullable
类型可以消除可空性:
type Fox = ExtractNullable<Animals, "fox">;
不幸的是,我无法正确定义 ExtractNullable
类型。我尝试了以下方法:
type ExtractNullable<T, K extends keyof T> = T[K] extends null ? never : T[K];
……但是没有用。 TypeScript 操场仍然给我 Fox
类型定义为 type Fox = { whatTheySaid: string; } | null
而不是 type Fox = { whatTheySaid: string; }
这可能吗?我哪里错了?
谢谢
type Fox = NonNullable<Animals["fox"]>;
实施:
/**
* Exclude null and undefined from T
*/
type NonNullable<T> = T extends null | undefined ? never : T;