Ts中的type、interface关键字

type定义
type作用就是给类型起一个新名字,支持基本类型、联合类型、元祖及其它任何你需要的手写类型,常用于联合类型

type test = number; //基本类型
let num: test = 10;
type userOjb = {name:string} // 对象
type getName = ()=>string  // 函数
type data = [number,string] // 元组
type numOrFun = Second | getName  // 联合类型

 interface只能表示function,object和class类型

interface A{name:string;
            add:()=>void;
}
interface B{():void}
 

 type和interface的区别

1、和接口一样,用来描述对象或函数的类型

type User = {
    name: string
    age: number
};
type SetUser = (name: string, age: number)=>void;

2、扩展和实现(extends & implement)
interface可以扩展,type可以通过交叉实现interface的extends行为
interface可以extends type,同时type也可以与interface类型交叉

interface Name {
  name: string;
}
interface User extends Name {
  age: number
}
let stu:User = {name: 'wang', age: 10}
//interface的扩展可以通过type交叉(&)类型实现
type Name = {
   name: string;
}
type User = Name & {age: number}
let stu:User={name: 'wang', age: 18}
//interface 扩展 type
type Name = {
  name: string;
}
interface User extends Name {
  age: number;
}
let stu:User={name: 'wang', age: 89}
//type与interface交叉
interface Name {
  name: string;
}
type User = Name & {
  age: number;
}
let stu:User={name:'wang', age: 18}

3、映射类型

type Keys = "name" | "sex"
type DuKey = {
  [Key in Keys]: string //类似 for ... in
}
let stu: Dukey = {
  name: 'wang',
  sex: 'man'
}

4、interface可以合并同名接口,type不可以 

interface A{name:string}
interface A{age:number}
var x:A={name:'xx',age:20}

5.、nterface可以继承interface,继承type,使用extends关键字,type也可继承type,也可继承interface,使用&

interface A{name:string}
interface B extends A{age:number}
 
type C={sex:string}
 
interface D extends C{name:string}
 
type E={name:string}&C
 
type F ={age:number}&A

6、还有类可以实现接口,也可以实现type 

interface A{name:string;add:()=>void}
type B={age:number,add:()=>void}
 
class C implements A{
    name:'xx'
    add(){console.log('类实现接口')}
}
 
class D implements B{
    age:20
    add(){console.log('类实现type')}
}

猜你喜欢

转载自blog.csdn.net/weixin_51225684/article/details/131549184
今日推荐