首页 > 解决方案 > 从返回多个(异构)值的 TypeScript 方法中获取值

问题描述

我有一个 TypeScript 方法,我想让它返回多个值,例如如下:

public test0() {
  return [true, "hello", Date.now()];
}

我尝试按如下方式调用此方法:

let ok: boolean, s: string, d: Date;
[ok, s, d] = this.test0();

这给出了以下错误:

(TS)类型'字符串| 号码 | boolean' 不能分配给类型 'boolean'。类型“字符串”不可分配给类型“布尔”。

(对于其他两个数组成员也是如此)

我也尝试过对象解构:

public test1() {
  return { success: true, msg: "hello", date: Date.now() };
}

...

var { success: ok, msg: s, date: d } = this.test1();

这有效,但前提是oks尚未d在当前范围内声明,例如类变量。因此,以下内容不起作用:

var { success: this.ok, msg: this.s, date: this.d } = this.test1();

问题:有没有办法在一行代码中实现多重赋值?例如,通过声明某种接口?

标签: typescriptmethodsreturn-value

解决方案


返回带有const断言的只读元组:

function test0(): readonly [true, "hello", number] {
  return [true, "hello", Date.now()] as const;
}

为了清楚起见,我添加了一个返回类型,但只需添加as const断言就可以推断出它。

现在,在下面的解构中ab, 和c将具有正确的类型。

const [a, b, c] = test0();

游乐场链接


推荐阅读