首页 > 解决方案 > 打字稿 - 创建新类型,不包括“从不”类型的道具

问题描述

在 Typescript v4.x 中,我试图从另一种类型(类/接口)创建一个新类型,其中所有never类型的道具都被排除在外,而不是在新类型中。

例如,给定一个接口:

interface A { propNever: never; propAnother: string; }

我想生成一个新的衍生类型,其中propNever排除了道具:

type B = { propAnother: string; };

到目前为止,我已经尝试了以下方法:

type OmitNeverProps<T> = Pick<T, ({[P in keyof T]: T[P] extends never ? never : P })[keyof T]>;

但没有运气 - 我的 Typescript 检查表明 propNever: never; 还在type B

如果有办法排除never-type 道具,有什么想法吗?

标签: typescript

解决方案


这对我有用。

TS 4.1.2

interface A { funcNever(): never; propNever: never; propAnother: string; }

type OmitNeverProps<T> = { [K in keyof T as T[K] extends never | ((...arg:any) => never) ? never : K]: T[K] } 

type B = OmitNeverProps<A>;

//type B = {
//    propAnother: string;
//}

TS 4.0.5

type OmitNeverProps<T> = Pick<T, ({[P in keyof T]: T[P] extends never | ((...arg:any) => never) ? never : P })[keyof T]>;

推荐阅读