typescript - 打字稿 - 创建新类型,不包括“从不”类型的道具
问题描述
在 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 道具,有什么想法吗?
解决方案
这对我有用。
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]>;
推荐阅读
- flutter - 切换选项卡后防止颤动未来再次运行
- c - 理论:实现涉及搜索多个二叉树节点的函数的最有效方法
- git - git merge:致命:我不能读取超过 8 棵树
- r - Quantstrat 问题:“交易必须按顺序添加”,尽管有错误修复
- angular - 当我离线时,我的带有 PWA 的 Angular Web 应用程序不起作用
- ibm-watson - Watson Assistant Dialog Skill 如何区分具有相同同义词的两个实体值?
- python - 使用连续模式正则表达式时的多个结果
- javascript - 如何重定向/转发到具有可变内容的新 html 页面?
- calculated-columns - 计算列 if 语句“除法”
- linkedin - Linkedin - 共享实体无权执行此操作