打字稿:省略不警告额外道具

时间:2021-05-27 10:28:24

标签: typescript interface

我对 Omit 有问题。它不是抱怨额外的道具。 看看这个示例代码:

interface Model {
   prop:number;
   dangerProp: number;
}

interface SafeModel extends Omit<Model, "dangerProp"> {}

这按预期工作,但是如果更改 SafeModel

interface SafeModel extends Omit<Model, "dangerPropMisspeled"> {}

尽管 prop 没有退出,但任何地方都没有错误。 Pick 总是检查相关性,但 Omit 似乎不会,但这不是我的真实代码中的一个选项。

这让我很困扰,如果有人在没有注意到 Model 应该更改为的情况下更改了 SafeModel,可能会导致我在工厂或其他地方出现一些错误。

那么,有没有办法强制 Omit 检查相关性? eslint 解决方案对我来说是一个有效的解决方法。

1 个答案:

答案 0 :(得分:2)

在我的项目中,我使用了一组按我需要工作的覆盖工具。 我的 Omit 版本看起来像这样。希望对你有帮助。往下看或在playground

中测试
type CustomOmit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>

interface Model {
   prop:number;
   dangerProp: number;
}

interface SafeModel extends CustomOmit<Model, "dangerProp"> {}

interface SafeModel extends CustomOmit<Model, "dangerPropMisspeled"> {}

enter image description here

必须适用于 TS 2.8 及更高版本。推出 Exclude 的版本


请让我知道它是否有效)