为什么在TypeScript内置实用程序中使用类型Omit
,定义为:
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
K
是keyof any
而不是keyof T
?
为什么在TypeScript内置实用程序中使用类型Omit
,定义为:
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
K
是keyof any
而不是keyof T
?
在相关的Github issue个问题上有很多来回,还有大约20多个相关问题.
本质上,Omit
类型是基于类似的实用程序类型,在各种现有的TypeScript助手库中定义,其中一些是严格的,而另一些是允许的.TypeScript团队 Select 使用许可变体.
正如本期中所讨论的,您可以定义自己的OmitStrict
类型,并配置ESLint以在使用常规Omit
类型时生成错误.
类型可以看起来像这样(从here开始):
type OmitStrict<T, K extends keyof T> = T extends any
? Pick<T, Exclude<keyof T, K>>
: never;
ESLint规则(here):
{
rules: {
'@typescript-eslint/ban-types': [
'error',
{
types: {
Omit: "Prefer `OmitStrict`.",
},
},
],
}
}