一般來說 ts 的變數宣告只能接受一個特定的值,但如果我給變數設定兩個可接收的型別,那就可以接收兩個型別,下方範例可以看到有兩個型別並且用|分割
這兩個是 TS 才有的語法,可以想像是只 JS 的類,只是再把它拆分更加嚴謹
${this.name} is moving.
);在 Ts 裡面,是用 interfaces 來定義物件型別,下面例子展示作法
其實道理跟物件差不多
在 TypeScript 中,函式或變數都需要明確指定型別(如 string、number 等),這叫做強型別(strong typing)。當你希望程式更有彈性與重用性,可以根據「實際傳入的值」自動決定型別,就可以使用 泛型(Generic)。
泛型的語法是 <T>
,它會在使用時根據實際傳入的值,自動推斷或手動指定型別,
<T>
是介於 any(完全沒限制)與明確型別(如 string)之間的「彈性型別」。
<T>
的T是標示符,T可以自己定義名稱,只要有<>就是泛型,一般來說有會有代表的意思
常用名稱 | 含義說明 |
---|---|
T |
Type,最常見的泛型名稱 |
U , V |
當有多個型別參數時常用第二、第三個名 |
K |
Key,常用於鍵的泛型 |
V |
Value,常用於值的泛型 |
E |
Element,用於集合元素 |
TData |
更語意化的寫法,例如 TData, TResult |
log<string>('Hello')
是指說檢查log()裡面的內容是否為字串,哪我是否可以寫成 console.log("hello"):string,還是規則就是要<><T>
是甚麼,依照範例,可以任意賦值近陣列中嗎
<T>
就表示一樣也是要強制型別,但是依照傳入的值來定義,比如log<string>('Hello')
,這就是我要定義這個log是字串,而引述也要強制寫成字串,是這個意思嗎,<T>
不像 :string :number 那樣的寫死,也不像 :any 的隨意,我這樣理解正確嗎<T>