什麼是Interface(接口)?
簡單來說就是一個用來定義一個物件內部 必要變數/變數型別的寫法
好用的點在於可以去限制一個物件必須要具備什麼樣的property
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| interface LabeledValue { label: string; name?:string; readonly color:'red' }
function printLabel(labeledObj: LabeledValue
) { console.log(labeledObj.label); }
let myObj = {size: 10, label: "Size 10 Object"}; printLabel(myObj);
|
什麼是ReadonlyArray(唯讀陣列)?
用途是用來確保陣列被定義為唯獨之後再也不能被修改
1 2 3 4 5 6 7 8
| let a: number[] = [1, 2, 3, 4]; let ro: ReadonlyArray<number> = a; ro[0] = 12; ro.push(5); ro.length = 100; a = ro;
a = ro as number[];
|
我把函數的參數物件用一個具備optional屬性的interface來定義型別,然後我傳入不存在於該interface的property卻報錯了,為什麼?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| interface LabeledValue { name?:string; }
let qq = (bb:LabeledValue)=>{ } qq({})
let apple:LabeledValue ={}; apple.name = 'fuji';
apple.color = 'red';
|
這說明了optional屬性只能接受”存在”或“不存在”這兩種值,用一個本來就不符合interface的property是不合法的