从可为Null的类型中提取不可为Null类型定义



假设我有以下由外部工具生成的接口:

interface Animals {
turtle: { shellHardness: number };
fox: { whatDidItSay: string } | null;
}

我想为乌龟和狐狸定义一个类型(从Animals中提取(,但不为狐狸定义…| 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; }

这可能吗?我做错了什么?

谢谢

NonNullable<类型>

type Fox = NonNullable<Animals["fox"]>;

实现:

/**
* Exclude null and undefined from T
*/
type NonNullable<T> = T extends null | undefined ? never : T;

相关内容

  • 没有找到相关文章