从返回多个(异构)值的 TypeScript 方法中获取值
Posted
技术标签:
【中文标题】从返回多个(异构)值的 TypeScript 方法中获取值【英文标题】:Getting values from a TypeScript method that returns multiple (heterogeneous) values 【发布时间】:2021-05-07 12:48:34 【问题描述】:我有一个 TypeScript 方法,我想让它返回多个值,例如如下:
public test0()
return [true, "hello", Date.now()];
我尝试如下调用这个方法:
let ok: boolean, s: string, d: Date;
[ok, s, d] = this.test0();
这会产生以下错误:
(TS) 键入'字符串 |号码 | boolean' 不可分配给类型 '布尔'。类型“字符串”不可分配给类型“布尔”。
(对于其他两个数组成员也是如此)
我也尝试过对象解构:
public test1()
return success: true, msg: "hello", date: Date.now() ;
...
var success: ok, msg: s, date: d = this.test1();
这有效,但前提是 ok
、s
和 d
尚未在当前范围内声明,例如类变量。因此,以下方法不起作用:
var success: this.ok, msg: this.s, date: this.d = this.test1();
问题:有没有办法在一行代码中实现多重赋值?例如。通过声明某种接口?
【问题讨论】:
【参考方案1】:返回一个带有const
assertion 的只读元组:
function test0(): readonly [true, "hello", number]
return [true, "hello", Date.now()] as const;
为了清楚起见,我添加了一个返回类型,但只需添加as const
断言即可推断出它。
现在,在以下解构中,a
、b
和 c
将具有正确的类型。
const [a, b, c] = test0();
Playground link
【讨论】:
谢谢,我不知道这个功能。但不幸的是,当要分配的变量已经在范围内的其他地方声明时它不起作用,就像我问题的最后一个代码 sn-p 一样,它们是类变量。 @JohnPool 对现有变量或属性的解构赋值已被询问和回答here 和/或here。本质上你不想使用var
。这是你的首要问题吗?或者您的主要问题是关于异构数组和元组?
谢谢,我想避免使用var
:解构赋值周围的括号给了我想要的结果!以上是关于从返回多个(异构)值的 TypeScript 方法中获取值的主要内容,如果未能解决你的问题,请参考以下文章