首页 > 解决方案 > 打字稿:省略不会警告额外的道具

问题描述

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

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

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

这可以按预期工作,但是如果SafeModel对此进行更改:

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

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

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

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

标签: typescriptinterface

解决方案


在我的项目中,我使用了一组可以根据需要工作的被覆盖的实用程序。我的版本Omit看起来像这样。希望它可以帮助你。看下面或在操场上测试

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的地方


请让我知道它是否有效)


推荐阅读