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

Typescript: Omit does not warning for extra props

我对 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 解决方案对我来说是一个有效的解决方法。

在我的项目中,我使用了一组可根据需要工作的覆盖实用程序。 我的 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"> {}

必须为 TS 2.8 及以上工作。 Exclude 引入的版本


请告诉我它是否有效)