2016-09-21 2 views
10

Рассмотрим следующий пример машинописного описания. Первая строка приводит к ошибке. Тип undefined [] не присваивается типу [string] '. Последние две строки компилируются.Разница между строкой [] и [string]

let givesAnError: [string] = []; 
let isOK: string[] = []; 
let isAlsoOK: [string] = ["foo"]; 

Как вы должны интерпретировать определение [string] типа в машинописном?

ответ

12

Первый (givesAnError) и последнего (isAlsoOK) are tuples, а второй (isOK) является массивом.

С массивами все ваши элементы одного и того же типа:

let a: string[]; 
let b: boolean[]; 
let c: any[]; 

Но с кортежей вы можете иметь различные типы (и фиксированную длину):

let a: [string, boolean, number]; 
let b: [any, any, string]; 

Итак:

a = ["str1", true, 4]; // fine 
b = [true, 3, "str"]; // fine 

Но:

a = [4, true, 3]; // not fine as the first element is not a string 
b = [true, 3]; // not fine because b has only two elements instead of 3 

Важно понимать, что вывод javascript всегда будет использовать массивы, поскольку в js нет такой вещи, как кортеж.
Но для времени компиляции это полезно.

Смежные вопросы