行爲的抽象
,另外能夠用來描述對象的形狀
1.對象的形狀編程
interface Speakable { // speak(): void; //或者下面的寫法 speak:()=>void; name: string; } let speakman: Speakable = { speak: () => {}, name: "fung" }; let aaa: Speakable = { name: "fung", speak: () => { console.log("漢語"); } };
2.行爲的抽象數組
interface Speakable { speak: () => void; } interface Eatable { eat: () => void; } class Person1 implements Speakable, Eatable { speak(){ console.log('chinese'); } eat(){ console.log('beaf'); } //也能夠這麼寫 // speak = () => { // console.log("chinese"); // }; // eat = () => { // console.log("beaf"); // }; }
3.任意屬性函數
//沒法預先知道有哪些新的屬性的時候,能夠使用 `[propName:string]:any`,propName名字是任意的 interface Person { readonly id: number; name: string; [propName: string]: any; } let p2: Person = { id: 1, name: "fung", age: 18 };
4.接口的繼承this
interface Speakable { speak(): void } interface SpeakChinese extends Speakable{ speakChinese():void } class Person implements Speakable, Speakable{ speak(){ console.log('Person') } speakChinese(){ console.log('chinese') } } let p = new Person(); p.speak(); p.speakChinese();
5.用 readonly 定義只讀屬性能夠避免因爲多人協做或者項目較爲複雜等因素形成對象的值被重寫插件
interface Person { readonly id: number; name: string; } let tom: Person = { id: 1, name: "zhufeng" }; tom.id = 1; //ERROW
6.函數類型接口
對函數傳入的參數和返回值進行約束code
interface add { (a: number, b: number): number; } let add: add = function(a, b) { return a + b; };
7.可索引接口對象
index
的類型是 number,那麼值的類型必須是 stringindex
的類型是 string,那麼值的類型必須是 stringinterface userInterface { [index: number]: string; } let arr: userInterface = ["a", "b"]; interface UserInterface2 { [index: string]: string; } let obj: UserInterface2 = { name: "fung" };
8.類接口
對類的約束繼承
interface Person { name: string; speak():void; } class Person implements Person { name: string; constructor(name: string) { this.name = name; } speak(){ console.log("chinese"); } } //或者這麼寫 interface PersonImp { name: string; speak: () => void; } class Person implements PersonImp { name: string; constructor(name: string) { this.name = name; } speak = () => { console.log("chinese"); }; }
9.構造函數的類型索引
class Animal { constructor(public name: string) {} } interface WithNameClass { new (name: string): Animal; } function createAnimal(clazz: WithNameClass, name: string) { return new clazz(name); } let a = createAnimal(Animal, "fung"); console.log(a.name);