Array<סוג> לעומת סוג[] ב-TypeScript


כפי שידוע לי, ניתן להגדיר את סוג הנכס בשתי דרכים כאשר מדובר במערך:

property_name: type

שֶׂרֶט הַסּוּג יָכוֹל לִהְיוֹת אֶתְרָה

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

ו

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

מה ההבדל בין שני המקרים? או שאני מבין משהו לא נכון (אולי משהו לגבי <> שמשתמשים בו בהמרה)?

תשובה #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>.

על המודיפיקציה מסוג readonly

TypeScript 3.4 מציגה את המודיפיקטור לסוג readonly. עם דיוק:

המכפיל סוג readonly יכול לשמש רק לסינטקס על סוגי מערכים וסוגי טופל

let err2: readonly Array<boolean>; // error!    
let okay: readonly boolean[]; // works fine

ההצהרה הבאה שקולה ל-readonly boolean[]:

let okay2: ReadonlyArray<boolean>;

תשובה #2

קיימת הבדל כאשר אתם מגדירים מערכים באורך קבוע. אי אפשר להגדיר מערך באורך קבוע עם Array<>, חייבים להשתמש בתחביר הקצר:

const myFunc1 = (arg: [string, number, boolean]) => {
  console.log(arg);
};
myFunc1(["hello world", 123, true]);

// error: TS2314: Generic type 'Array ' requires 1 type argument(s).
const myFunc2 = (arg: Array<string, number, boolean>) => {
  console.log(arg);
};
myFunc2(["hello world", 123, true])