1. 程式人生 > 其它 >(三)typescript之介面

(三)typescript之介面

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:string
4 } 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.");
    }
}