接口
interface LabelledValue {label: string}function printLabel(labelledObj: LabelledValue) {console.log(labelledObj.label);}let myObj = { size: 11, label: "Size 11 Object" }printLabel(myObj)
可选属性 ?
只读属性 readonly readonlyArray
使用:
- readonly const
- 变量用const 属性用readonly
interface SquareConfig {color?: string;width?: number;readonly x?: number}function createSquare(config: SquareConfig): { color: string; area: number } {let newSquare = { color: "white", area: 100 };// if (config.colo) { //属性“colo”在类型“SquareConfig”上不存在。你是否指的是“color”if (config.color) {newSquare.color = config.color;}if (config.width) {newSquare.area = config.width * config.width;}return newSquare;}let mySquare = createSquare({ color: "black" });console.log(mySquare);let obj: SquareConfig = { color: 'red', width: 12, x: 100 }console.log(obj);// obj.x = 6 //无法赋值 因为是只读属性let arr: number[] = [1, 2, 3, 4]let cArr: ReadonlyArray<number> = arr// cArr[0] = 2 //error// cArr.length = 100 //errorconsole.log(cArr[0]); //1// arr = cArr //errorarr = cArr as number[] //可以用 类型断言重写
额外的属性检查
```typescript interface SquareConfig { color?: string area?: number
} function createSquare(config: SquareConfig): { color: string; area: number } { // … let myObj = { area: 11, color: “Size 11 Object” } return myObj } let mySquare = createSquare({ colour: “red”, width: 100 });
<a name="drGt6"></a>### 函数类型- 为了使用接口表示函数类型,我们需要给接口定义一个调用签名。- 它就像是一个只有参数列表和返回值类型的函数定义。- 参数列表里的每个参数都需要名字和类型。```typescriptinterface SearchFunc {(source: string, subString: string): boolean;}// let mySearch:SearchFunc// mySearch = function (source:string,subString:string) {// let res = source.search(subString)// return res > -1// }let mySearch: SearchFunc;mySearch = function (src, sub) {let result = src.search(sub);return result > -1;}
可索引的类型
- 上面例子里,我们定义了StringArray接口,它具有索引签名。
- 这个索引签名表示了当用 number去索引StringArray时会得到string类型的返回值 ```typescript interface StringArray {
}
let myArray: StringArray
myArray = [‘1’, ‘2’]
let str: string = myArray[0] // ‘1’
interface ReadonlyStringArray {
readonly [index: string]: number;
length: number; // 可以,length是number类型
name: string // 错误,name的类型与索引类型返回值的类型不匹配
}
let myArray: ReadonlyStringArray = [“Alice”, “Bob”];
myArray[2] = “Mallory”; // error!
```
