【问题标题】:Typescript: Omit does not warning for extra props打字稿:省略不会警告额外的道具
【发布时间】:2021-05-27 10:28:24
【问题描述】:

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

【问题讨论】:

    标签: typescript interface


    【解决方案1】:

    在我的项目中,我使用了一组可根据需要工作的重写实用程序。 我的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 的地方发布


    请告诉我它是否有效)

    【讨论】:

    • 像魅力一样工作 :) 非常感谢您的帮助 ^^ 我可以在几分钟内接受答案
    猜你喜欢
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    相关资源
    最近更新 更多