首页 > 解决方案 > 可选接口成员的打字稿强制实现

问题描述

给定一个接口

interface IAmOptional {
   optional? : string,
   optional2?: string
   forced: string
}

IAmOptional有没有办法以这种实现失败的方式来隐藏、扩展或类似的方式?

class someClass {
    thisShouldHaveAllKeys : IAmOptional  = { // Forced<IAmOptional> ??
        forced: 'i am forced'
    }  // Here I want an error like 'thisShouldHaveAllKeys does not have optional and optional2' 
}

标签: typescript

解决方案


是的,从 TypeScript 2.8 开始,有一种方法可以使用映射类型的语法以编程方式从属性中删除可选修饰符-?

type Required<T> = { [K in keyof T]-?: T[K] }

这为您提供了您想要的行为:

class someClass {
  thisShouldHaveAllKeys: Required<IAmOptional> = {  // error!
//~~~~~~~~~~~~~~~~~~~~~ <-- missing properties optional1, optional2
    forced: 'i am forced'
  }
}

事实上,这个Required类型别名非常有用,它已经在标准库中为您预定义了。所以你可以直接使用它而不定义它。

希望有帮助。祝你好运!


推荐阅读