提供界面
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'
}
答案 0 :(得分:4)
是的,从TypeScript 2.8开始,有一种方法可以programmatically remove the optional modifier from properties使用-?
语法和mapped types:
type Required<T> = { [K in keyof T]-?: T[K] }
这会给您您想要的行为:
class someClass {
thisShouldHaveAllKeys: Required<IAmOptional> = { // error!
//~~~~~~~~~~~~~~~~~~~~~ <-- missing properties optional1, optional2
forced: 'i am forced'
}
}
实际上,这个Required
类型的别名非常有用,以至于它是predefined for you in the standard library。因此,您无需定义即可使用它。
希望有帮助。祝你好运!
答案 1 :(得分:0)
您可以使用第二个界面覆盖可选成员:
unity.Resolve<IFunctionary<IOrder>[]>("Preparation")
它不是很优雅,但是可以解决问题。另一种方法是将问题颠倒过来,并使用Typescript的IFunctionary<IOrder>
功能:
interface IAmOptional {
optional? : string,
optional2?: string
forced: string
}
interface IAmNotOptional extends IAmOptional {
optional: string;
optional2: string;
}