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])
