打字稿:省略不警告额外的道具
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
引入的版本
请告诉我它是否有效)
我对 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
引入的版本
请告诉我它是否有效)