如何从typescript函数返回多个值

mfpqipee  于 2022-12-05  发布在  TypeScript
关注(0)|答案(3)|浏览(240)

我想让一个Typescript函数返回多个值。我该怎么做?还有-我该怎么声明类型?
比如我想实现这样的目标:

let [text, value] = ReturnTwoValues("someinputstring")
kzmpq1sx

kzmpq1sx1#

函数定义:

public ReturnTwoValues(someInput: string): [string, boolean] {
    const text = "hello"
    const value = true
    return [text, value]
}

来电者:

let [text, value] = ReturnTwoValues("someinputstring")
e0bqpujr

e0bqpujr2#

public ReturnTwoValues(someInput: string): {text:string, value:boolean} {
    const text = "hello"
    const value = true
    return {text, value}
}

let {text, value} = ReturnTwoValues("some irrelevant string");

console.log(text) //output hello
console.log(value) // output value
8cdiaqws

8cdiaqws3#

**注意:**此答案是在询问如何返回多个值 * 而不创建对象 * 时编写得.该问题后来经过编辑,删除了该要求.

当然,由于一个函数只返回一个值,那么返回多个值的唯一方法就是将它们一起 Package 在某个对象中;正如其他人在注解中提到的,数组是一种对象。然而,你不必为此创建一个 * 新 * 对象,所以 * 技术上 * 你所要求的是可能的。这里有一个解决方案,它使用函数本身作为返回值,所以它满足了当函数被调用时不创建对象的条件。

interface Foo {
    x: string,
    y: number,
    (): Foo
}

const foo = (() => {
    foo.x = 'bar';
    foo.y = 1;
    return foo;
}) as Foo;

let { x, y } = foo();
console.log(x); // bar
console.log(y); // 1

Playground链接
不过,我并不建议实际执行此操作;由于它并不是每次都返回一个新的对象,所以如果保留对返回值的引用并期望其属性保持不变,则可能会导致bug。

相关问题