- 通過
?
定義可有可無的屬性、通過readonly
定義只讀屬性
interface per {
name: String
age?: Number
readonly sex: Boolean
}
- 定義函數類型
定義函數的入參和返回值, 函數的參數名不需要和接口中參數名一樣,但是類型和順序得一一對應
interface fn {
(name: String, age: Number): Boolean
}
let foo:fn
foo = function (na:String, age:Number){
return age>18
}
- 索引類型
interface test {
[i:number]: String
age: number
name: string
}
- 類類型
描述類的公共屬性和方法
interface cl{
date: number [] // 定義屬性
someMethod(par: string) // 定義類的方法
}
class testCl implements cl {
date = [1,2,3]
someMethod(str) {
console.log(str)
}
}
- 繼承接口
如下例子中Square有三個屬性,分別繼承Shape和PenStroke
interface Shape {
color: string;
}
interface PenStroke {
penWidth: number;
}
interface Square extends Shape, PenStroke {
sideLength: number;
}
let Square = <Square>{}
Square.color = 'str'
Square.sideLength = 10
Square.penWidth = 100
- 混合類型
既可以定義對象又可以定義函數
interface Counter {
(start: number): string;
interval: number;
reset(): void;
}
function getCounter(): Counter {
let counter = <Counter>function (start: number) { };
counter.interval = 123;
counter.reset = function () { };
return counter;
}
let c = getCounter();
c(10);
c.reset();
c.interval = 5.0;