(三)typescript之介面
阿新 • • 發佈:2021-07-15
1.什麼是介面
用於約束類、物件、函式的標準
2.介面的使用
(1)約束物件
1 interface IFullName { 2 firstName:string, 3 lastName:string 4 } 5 const fullName = ({firstName,lastName}:IFullName):string =>{ 6 return firstName + lastName 7 }
物件介面可以用來描述物件的形狀結構
1 interface IVegetables { 2 readonly color:string, 3 size:string4 } 5 interface IVegetables{ 6 age?:number, // ?標識的屬性為可選屬性 7 taste:'sour'|'sweet' 8 } 9 const tomato:IVegetables = { 10 color:'red', 11 size:'10', 12 taste:'sour' 13 } 14 tomato.color = 'green'; // 僅讀屬性不能進行修改
(2)約束函式
interface IFullName { firstName:string, lastName:string }
// 介面約束函式 interface IFn { (obj:IFullName):string } const fullName:IFn= ({firstName,lastName})=>{ return firstName + lastName }
(3)約束類
interface Speakable { name:string; speak():void; } interface ChineseSpeakable{ speakChinese():void }
// 介面實現類 需要用到implements關鍵字 class Speak implements Speakable,ChineseSpeakable{ name!:string speak(){} speakChinese(){} }
3.介面和類型別名的區別
// 約束物件和函式時,也可以使用類型別名來實現
type IFullName = {
firstName: string;
lastName: string;
};
type IFn = (obj: IFullName) => string;
const fullName: IFn = ({ firstName, lastName }) => {
return firstName + lastName;
};
那它們之間有什麼區別呢?
共同點:
都不會出現在編譯結果中
不同點:
1.類型別名不能約束類,介面可以約束類
2.類型別名不能繼承,介面可以實現繼承
interface Speakable { speak():void } interface SpeakChinese extends Speakable{ speakChinese():void } class Speak implements SpeakChinese{ speakChinese(): void { throw new Error("Method not implemented."); } speak(): void { throw new Error("Method not implemented."); } }