TypeScript 接口

基本用法

TypeScript 接口用于约束变量的类型,名称与需要验证的变量一一对应,它不会去检查属性的顺序,只要相应的属性存在并且类型也是对的就可以,可复用。它的结构是 interface 接口名称 {定义规则}

作用于变量:

// 声名一个person的接口
interface person {
    name: string;
    age: number;
}

// 约束对象my的属性及类型
let my: person = { name: '张三', age: 18 };

// 约束数组persons的属性及类型
let persons: person[] = [
    { name: '张三', age: 18 },
    { name: '李四', age: 20 },
];

以上可省去 interface 的声明,简写为(常用):

let my: { name: string; age: number } = { name: '张三', age: 18 };

let persons: { name: string; age: number }[] = [
    { name: '张三', age: 18 },
    { name: '李四', age: 20 },
];

作用于函数:

// 声名一个testType的接口
interface testType {
    name: string;
    age: number;
}

// 约束入参的类型
function test(obj: testType) {
    console.log(obj.name);
    console.log(obj.age);
}

test({ name: "xia", age: 20, height: 180 }); // height: 180 将会报错提示,但仍然能编译并打印出   xia 20

扩展用法

1. 可选属性(接口定义中加“?”)

interface testType {
    name: string;
    age: number;
    height?: number;
}

function test(obj: testType): void {
    console.log(obj.name);
    console.log(obj.age);
    console.log(obj.height);
}

test({ name: "xia", age: 20, height: 180 });  // xia 20 180
// height 不传也不会报错

2. 只读属性(readonly)

interface testType {
    readonly name: string;
    age: number;
}

let test: testType = { name: "张三", age: 20 }

test.name = "李四";
// name是只读属性不能修改,会报错提示,但仍然能编译并修改成功

3. 接口继承(extends)

interface nameFace {
    name: string;
}

interface ageFace {
    age: number;
}

interface heightFace extends nameFace, ageFace {
    height: number;
}

let person = <heightFace>{};
person.name = "xia";
person.age = 20;
person.height = 180;

4. 接口继承类

class Point {
    x: number;
    y: number;
}

interface Point3d extends Point {
    z: number;
}

let point3d: Point3d = {x: 1, y: 2, z: 3};

5. 类实现接口 (implements)

interface Animal {
    eat(): any
}

// Sheep类实现Animal接口
class Sheep implements Animal {
    eat() {  // 必须调用eat()方法 否则报错
        // ...
    }
}

class Cat implements Animal {
    eat() {  // 必须调用eat()方法 否则报错
        // ...
    }
}
posted @ 2022-07-20 18:16  猫老板的豆  阅读(46)  评论(0编辑  收藏  举报