是否可以扩展接口并覆盖成员的类型,如下面的示例所示?我希望能够做到这一点,以便在创建类型为IPathParam
的对象时,编译器知道required
属性应为true
而不是被忽略或为false
。使用下面的代码,编译器抱怨类型'path'
无法分配给类型'header' | 'query'
interface IParam {
in: 'header' | 'query'
required?: boolean
...
}
interface IPathParam extends IParam {
in: 'path'
required: true
}
答案 0 :(得分:1)
您不能这样做,并且有充分的理由,如评论中所指出。子类型的想法是,子类型的实例仍然是基本类型的实例。更改成员类型将违反此约束。
现在,如果您只想与接口基本相同但成员不同的类型,则可以使用Omit
和交集来实现。请注意,此新类型将不是您接口的子类型,但在某些情况下可能仍然有用:
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>
interface IParam {
in: 'header' | 'query'
required?: boolean
}
type ISimilarToParam = Omit<IParam, 'in'> & {
in: 'path'
};