ts中的type和interface的区别

539 阅读1分钟

一、type概念

type作用就是给类型起一个新名字,支持基本类型、联合类型、元组给一个类型重新定义一个新的名字,常用于联合类型

let nums: test = 12;
console.log(nums);
type obj = {name:string};// 对象
let obja:obj = { name: '23' }
console.log(obja);
type add = (x:number,y:number) => number; // 函数
let add:add = (a,b) => a + b;
console.log(add(1,3));
type data = [number,string]; // 元组
let ar: data = [23,'ni'];
console.log(ar);
type numstring = test|string; // 联合类型
let numstr:numstring = 32;
console.log(numstr);

二、type和interface之间的区别

1、type和interface一样可以用来描述对象或者函数之间的类型。

  name: string,
  age: number,
  say(s:string,y:string): string,
};
interface People {
  name: string,
  age:number,
  say(x:string,y:string):string
}
let testObj:User = {
  name: '李四',
  age: 23,
  say(x,y){ return x + y}
}
console.log(testObj.say('你','我'));

2、interface中的extends和implement和type中的类型交叉&

  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中有个in的关键词可以进行映射类型,interface没有

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