Gie Spaepen Gie Spaepen - 1 month ago 7x
TypeScript Question

Difference between string[] and [string]

Consider the following Typescript example. The first line results in an error 'type undefined[] is not assignable to type [string]'. The last two lines do compile.

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

How do you have to interprete the type definition
in Typescript?


The first (givesAnError) and last (isAlsoOK) are tuples, and the second (isOK) is an array.

With arrays all of your elements are of the same type:

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

But with tuples you can have different types (and a fixed length):

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

It's important to understand the the javascript output will always use arrays, as there's no such thing as tuple in js.
But for the compilation time it is useful.