Разница между типом [] и [type] в typescript

Предположим, что у нас есть два интерфейса:

interface WithStringArray1 {
    property: [string]
}

interface WithStringArray2 {
    property: string[]
}

Давайте объявим некоторые переменные этих типов:

let type1:WithStringArray1 = {
   property: []
}

let type2:WithStringArray2 = {
    property: []
}

Первая инициализация не выполняется:

TS2322: Type '{ property: undefined[]; }' is not assignable to type 'WithStringArray1'.
Types of property 'property' are incompatible.
Type 'undefined[]' is not assignable to type '[string]'.
Property '0' is missing in type 'undefined[]'.

Второй вариант в порядке.

В чем разница между [string] и string[]?

Ответ 1

  • [string] обозначает Tuple строки типа
  • string[] обозначает массив строк

Правильное использование Tuple в вашем случае будет:

let type2:WithStringArray2 = {
    property: ['someString']
};

См. Документация

Ответ 2

если мы посмотрим кортеж с тремя переменными. Вы можете увидеть разницу ясно.

let t: [number, string?, boolean?];
t = [42, "hello", true];

let tuple: [string] является кортежем (string), тогда как let arr: string[] является массивом строк.