为什么在TypeScript内置实用程序中使用类型Omit,定义为:

type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;

Kkeyof 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`.",
        },
      },
    ],
  }
}

Typescript相关问答推荐

创建一个将任意命名类型映射到其他类型的TypScript通用类型

具有映射返回类型的通用设置实用程序

为什么typescript要把这个空合并转换成三元?

将值添加到具有不同类型的对象的元素

使Typescribe强制所有对象具有相同的 struct ,从两个选项

如何推断计算逻辑的类型

如何在TypeScript中将一个元组映射(转换)到另一个元组?

如何在typescript中设置对象分配时的键类型和值类型

我想创建一个只需要一个未定义属性的打字脚本类型

如何创建一家Reduxstore ?

在排版修饰器中推断方法响应类型

不带其他属性的精确函数返回类型

找不到财产的标准方式?

跟踪深度路径时按条件提取嵌套类型

在打字脚本中对可迭代对象进行可变压缩

使用Type脚本更新对象属性

Cypress-验证别名的存在或将别名中的文本与';if';语句中的字符串进行比较

为什么数字是`{[key:string]:UNKNOWN;}`的有效密钥?

有没有办法在Reaction组件中动态导入打字脚本`type`?

我的类型谓词函数不能像我预期的那样工作.需要帮助了解原因