ts定义数组类型_TS -- (2)接口、数组的类型、函数的类型

2019-10-28:

学习内容:接口、数组的类型、函数的类型

(展开涉及多个内容)

一、接口(Interfaces):

(1)

LabelledValue接口就好比一个名字,用来描述上面例子里的要求。 它代表了有一个 label属性且类型为string的对象。 需要注意的是,我们在这里并不能像在其它语言里一样,说传给 printLabel的对象实现了这个接口。我们只会去关注值的外形。 只要传入的对象满足上面提到的必要条件,那么它就是被允许的。

还有一点值得提的是,类型检查器不会去检查属性的顺序,只要相应的属性存在并且类型也是对的就可以。

interface LabelledValue {

label: string;

color?: string

}functionprintLabel(labelledObj: LabelledValue) {

console.log(labelledObj.label);

}

let myObj= {size: 10, label: "Size 10 Object"};

printLabel(myObj);

// 可选属性:接口里的属性不全都是必需的。 有些是只在某些条件下存在,或者根本不存在。在可选属性名字定义的后面加一个?符号。可选属性的好处之一是可以对可能存在的属性进行预定义,好处之二是可以捕获引用了不存在的属性时的错误

(2)只读属性:readonly

一些对象属性只能在对象刚刚创建的时候修改其值。 你可以在属性名前用 readonly来指定只读属性

interface Point {

readonly x: number;

readonly y: number;

}

let p1: Point= { x: 10, y: 20};

p1.x= 5; //error!

只读数组类型:

let a: number[] = [1, 2, 3, 4];

let ro: ReadonlyArray =a;

ro[0] = 12; //error!

ro.push(5); //error!

ro.length = 100; //error!

a = ro; //error!

//最后一行可以看到就算把整个ReadonlyArray赋值到一个普通数组也是不可以的。解决的方法就是类型断言重写(就是没有办法)

区别readonly 和 const:const针对变量,readonly针对属性。

(3)额外的属性检查:多数情况下它都是个bug,不建议绕开检查

interface SquareConfig {

color?: string;

width?: number;

}functioncreateSquare(config: SquareConfig): { color: string; area: number } {//...

你可能感兴趣的:(ts定义数组类型)