【发布时间】:2015-02-04 04:36:20
【问题描述】:
似乎我想做的事情是不可能的,但我真的希望它是。
本质上,我有两个接口,我想将单个函数参数注释为它们的组合。
interface ClientRequest {
userId: number
sessionKey: string
}
interface Coords {
lat: number
long: number
}
然后,在函数中,我想做这样的事情:
function(data: ClientRequest&Coords) { ... }
这样我的“数据”对象就可以包含这两种类型的所有成员。
我在 spec preview 的“组合类型的成员”下看到了一些引用,但它似乎还没有出现。
如果不可能,我的解决方案可能如下所示:
interface ClientRequest<T> {
userId: number
sessionKey: string
data?: T
}
function(data: ClientRequest<Coords>) { ... }
这在这种情况下会起作用,尽管它不像我想要的那样动态。我真的很希望能够在注释本身中组合多种(2+)类型:
function(data: TypeA&TypeB&TypeC) { ... }
我猜想传统的解决方案是定义一个扩展这些类型的类型,尽管这看起来不太灵活。如果我想添加一个类型,我必须要么
- (a) 返回声明并重写它,或者
- (b) 创建一个全新的界面。不确定我是否同意额外的开销。
有没有 TypeScript 专家愿意为我指明正确的方向?
【问题讨论】:
-
我试图通过定义
interface Both<A,B> extends A, B {}来启用此功能,但被告知“一个接口只能扩展一个类或另一个接口”。 Looks like a dead end.
标签: javascript typescript interface