02Typescript接口和类型别名

53 阅读1分钟

1.接口

使用场景:当一个对象类型被多次使用时,一般会使用接口(interface)来描述对象的类型,达到复用的目的。

interface Person{
    name:string;
    age:number;
    say():void;
    hobby?:string;
    readonly x: number;
}

语法规范 1.使用interface关键字来声明接口 2.属性类型后用 ;(分号)结尾 3.所有属性都不能有实际值,只定义结构 类型 4.hobby?:string;可读属性 对可能存在的属性进行预定义 5.readonly x: number; 只读属性 对象属性只能在对象刚刚创建的时候修改其值 例如 在这里插入图片描述

2.类型别名

type Person={
    name:string;
    age:number;
    say():void;
    hobby?:string;
    readonly x: number;
}

3.两者对比

相同点: 1.都可以给对象指定类型 不同点: 1.类型别名不仅可以给对象指定类型别名,还可以为其他类型指定别名

type strNum=string|number

2.使用interface相同的名字指定类型时类型会合并,而type不可以

interface A{
    name:string;
}
interface A{
    age:number;
}
let student:A={
    name:'小明',
    age:18
}

4.有其他不知道属性类型时

propName可以随意起名字,后面的string是为对象的key(属性)指定类型,
any是值可以任意类型,也可以为其指定单独的类型
interface A{
    name:string;
    [propName:string]:any;
}
interface A{
    name:string;
    [propName:string]:number|string;
}

5.interface使用继承

接口也可以相互继承,将公共的属性或方法抽离出来,通过继承来实现复用

此时B既有自己的类型指定,也继承了A所指定的类型
interface A{
    name:string;
}
interface B extends A{
    age:number;
}
let student:B={
    name:'小明',
    age:18
}