gpt4 book ai didi

javascript - 是否可以在 TypeScript 注释中组合多种类型的成员?

转载 作者:搜寻专家 更新时间:2023-10-30 20:30:57 24 4
gpt4 key购买 nike

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

本质上,我有两个接口(interface),我想将单个函数参数注释为它们两者的组合。

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 专家愿意为我指出正确的方向吗?

最佳答案

答案更新于 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
);
}

原始答案

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

对于您要解决的问题,最佳做法是创建第三种类型来扩展其他两种类型。

interface IClientRequestAndCoords extends IClientRequest, ICoords {} 

function(data: IClientRequestAndCoords)

关于javascript - 是否可以在 TypeScript 注释中组合多种类型的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27325524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com