看来我想做的是不可能的,但我真的希望是这样.

本质上,我有两个接口,我想把一个函数参数注释为两者的组合.

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) 创建一个全新的界面.我不太同意额外的开销.

有没有 typewriter 专家愿意为我指出正确的方向?

推荐答案

你的问题的具体答案是:不,没有一个内联注释来表示组合或扩展类型.

对于你试图解决的问题,最好的做法是创建第三种类型,扩展其他两种类型.

interface IClientRequestAndCoords extends IClientRequest, ICoords {} 

function(data: IClientRequestAndCoords) 

UPDATE 2018-10-30

TypeScript现在有了类型交叉点.所以你现在可以简单地做:

interface ClientRequest {
  userId:     number
  sessionKey: string
}

interface Coords {
  lat:  number
  long: number
}

function log(data: ClientRequest & Coords) { 
  console.log(
    data.userId,
    data.sessionKey,
    data.lat,
    data.long
  );
}

Typescript相关问答推荐

了解TS类型参数列表中的分配

使Typescribe强制所有对象具有相同的 struct ,从两个选项

为什么TypeScript假设文档对象始终可用?

Angular 错误NG0303在Angular 项目中使用app.Component.html中的NGFor

如何使用类型谓词将类型限制为不可赋值的类型?

迭代通过具有泛型值的映射类型记录

Typescript 中相同类型的不同结果

TypeScrip:使用Union ToInterval辅助对象,但保留子表达式

接受字符串或数字的排序函数

在抽象类属性定义中扩展泛型类型

如何使用泛型函数参数定义类型脚本函数

如何使用TypeScrip在EXPO路由链路组件中使用动态路由?

Angular NG8001错误.组件只能在一个页面上工作,而不是在她的页面上工作

使用&reaction测试库&如何使用提供程序包装我的所有测试组件

在ts中获取级联子K类型?

使用 fp-ts 时如何使用 TypeScript 序列化任务执行?

Angular另一个组件的nativeelement未定义

根据索引将元组拆分为两个块

当受其他参数限制时,通用参数类型不会缩小

redux-toolkit、createAsyncThunk 错误