Typescript выводит Tuple как массив неправильно - PullRequest
0 голосов
/ 15 марта 2020

Извиняюсь за мой Engli sh первым.

У меня есть функция типа function func(): [string, string[]], которая возвращает Tuple. Тем не менее, когда я реализую оператор возврата, например

var test = ['text', ['foo', 'bar']];
return test;

Typescript выводит мой тип возврата как (string | string[])[] вместо [string, string[]].

Я что-то пропустил или мне нужно будет привести возвращать объект как Tuple явно каждый раз как return <[string, string[]]>['text', ['foo', 'bar']]. Если да, то не слишком ли это раздражает?

Обеспечил полную функцию следующим образом:

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

    return test;
}

Ошибка: Type '(string | string[])[]' is missing the following properties from type '[string, string[]]': 0, 1ts(2739)

enter image description here

1 Ответ

1 голос
/ 15 марта 2020

TS нельзя дифференцировать, если вы хотите, чтобы ['text', ['foo', 'bar']] был массивом или кортежем - выражение одинаково! По умолчанию будет использоваться массив для типа переменной test, если ничего не указано.

Если вы хотите кортеж, выполните одно из следующих действий:

  • используйте const assertion
  • дать 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
}

С as const вам не нужно повторять свой тип, но у вас будет аннотировать возвращаемый тип функции модификаторами readonly: readonly [string, readonly [string, string]].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...