打字稿错误地将元组推断为数组

man*_*nok 2 casting tuples typescript

首先为我的英语道歉。

我有一个类似function func(): [string, string[]]返回元组的函数。但是,当我实现像这样的 return 语句时

var test = ['text', ['foo', 'bar']];
return test;
Run Code Online (Sandbox Code Playgroud)

Typescript 将我的返回类型推断为而(string | string[])[]不是[string, string[]].

我是否错过了某些内容,或者我是否需要每次都将返回对象显式转换为 Tuple ,例如return <[string, string[]]>['text', ['foo', 'bar']]. 如果是的话,那不是很烦人吗?

提供完整功能如下:

function func(): [string, string[]] {
    var test= ['text', ['foo', 'bar']];

    return test;
}
Run Code Online (Sandbox Code Playgroud)

错误: Type '(string | string[])[]' is missing the following properties from type '[string, string[]]': 0, 1ts(2739)

在此输入图像描述

for*_*d04 5

TS 无法区分,如果你想['text', ['foo', 'bar']]成为数组元组-表达式是相同的!test如果没有其他指定,它将默认为变量类型的数组。

如果您想要一个元组,请执行以下操作之一:

function func(): [string, string[]] {
    const test = ['text', ['foo', 'bar']];
    const test2 = ['text', ['foo', 'bar']] as const;
    const test3: [string, string[]] = ['text', ['foo', 'bar']];
    // return test;   // error, was inferred as array
    // return test2; // works
    return test3; // works
}
Run Code Online (Sandbox Code Playgroud)

您不必as const重复您的类型,但您必须使用readonly修饰符注释函数返回类型:readonly [string, readonly [string, string]]