在JavaScript中并没有出现接口的概念,但这个是TypeScript核心原则之一的设计,在TypeScript中,接口就是为代码定义类型,约定契约关系

    基础用法:

    1. const sum = ({x, y}: {x: number, y: number}): number => {
    2. return x + y;
    3. }

    以上的写法中约定了,我们x、y必须为number类型,而且返回值也必须要number类型,这样写是完全没有问题的,但是当对象的属性较多时,我们的代码就不适合阅读了,所以我们可以使用接口进行简化:

    1. interface ISum {
    2. x: number;
    3. y: number;
    4. }
    5. const sum = ({x, y}: ISum): number => {
    6. return x + y;
    7. }

    可选属性:
    接口中的属性不全是必须的。有些只是在某些条件下存在,或者根本不存在,这个时候就需要使用到可选属性

    1. interface SquareConfig {
    2. color?: string;
    3. width?: number;
    4. }
    5. function createSquare(config: SquareConfig): {color: string; area: number} {
    6. let newSquare = {color: "white", area: 100};
    7. if (config.color) {
    8. newSquare.color = config.color;
    9. }
    10. if (config.width) {
    11. newSquare.area = config.width * config.width;
    12. }
    13. return newSquare;
    14. }
    15. let mySquare = createSquare({color: "black"});

    带有可选属性的接口和普通定义的接口差不多,只是在可选属性名定义的后面加上一个?
    可选属性的好处之一就是可以对可能存在的属性进行预设定,好处二就是可以捕获引用了不存在属性时的错误。

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

    1. interface Point {
    2. readonly x: number;
    3. readonly y: number;
    4. }
    5. //可以通过赋值一个对象字面量来构造一个Point。 赋值后, x和y再也不能被改变了。
    6. let p1: Point = { x: 10, y: 20 };
    7. p1.x = 5; // error!

    TypeScript具有ReadonlayArray类型,它于Array相似,只是把所有可变的方法去掉了,因此可以保证数组被创建以后再也不能被修改:

    1. let a: number[] = [1, 2, 3, 4];
    2. let ro: ReadonlyArray<number> = a;
    3. ro[0] = 12; // error!
    4. ro.push(5); // error!
    5. ro.length = 100; // error!

    那么到底是应该使用readonly还是使用const呢?如果是作为变量使用的话用const,如果作为属性使用则用readonly。

    函数类型:
    为了使用接口表示函数,需要给接口定义一个调用签名。它就像是一个只有参数列表和返回值类型的函数定义,参数列表里的每一个参数都需要名字和类型。

    1. interface SearchFunc {
    2. (source: string, subString: string): boolean;
    3. }
    4. let mySearch: SearchFunc;
    5. // 对于函数类型的类型检查来说,函数的参数名不需要与接口里定义的名字相匹配。
    6. mySearch = function(src: string, sub: string) {
    7. let result = src.search(sub);
    8. return result > -1;
    9. }