Подтвердить что ты не робот

Массив <Тип> VS Тип [] в Typescript

Насколько я знаю, тип свойства может быть определен двумя способами, когда это массив.

property_name: type

где тип может быть либо

Array<string>, Array<MyType>, etc. (e.g. let prop1: Array<string>)

а также

string[], MyType[], etc. (e.g. let prop1: string[])

В чем разница между этими двумя случаями? Или я что-то недопонимаю (возможно, что-то о <> используемом в кастинге?)

РЕДАКТИРОВАТЬ, так как вопрос помечен как дубликат, я знаю, что есть другой вопрос о любом [], но все же я посмотрел на него перед публикацией, и для меня это было больше о типе "любой", чем различные [] VS < > Я спросил

4b9b3361

Ответ 1

Нет никакой семантической разницы

Там нет никакой разницы вообще. Type[] - это сокращенный синтаксис для массива Type. Array<Type> - это общий синтаксис. Они полностью эквивалентны.

Справочник дает пример здесь. Это эквивалентно записи:

function loggingIdentity<T>(arg: T[]): T[] {
    console.log(arg.length);
    return arg;
}

Или:

function loggingIdentity<T>(arg: Array<T>): Array<T> {
    console.log(arg.length);
    return arg;
}

А вот цитата из некоторых заметок о выпуске:

В частности, number[] является сокращенной версией Array<number>, так же как Date[] является сокращенной записью для Array<Date>.

Однако в некоторых случаях требуется сокращенный синтаксис

Начиная с TypeScript 3.4, есть разница для нового модификатора типа readonly. Действительно:

модификатор типа readonly можно использовать только для синтаксиса для типов массивов и типов кортежей

let err1: readonly Set<number>; // error!
let err2: readonly Array<boolean>; // error!

let okay: readonly boolean[]; // works fine

Ответ 2

foo: Array

означает, что это простой массив с неявным типом any для него членов

foo: string[]

означает, что массив строк, т.е. TypeScript, станет умным, если вы попытаетесь нажимать на этот массив ничего, кроме строк.