1、在Ts中,我们可以通过type和interface的方式去定义类型,一般情况下通过interface接口的方法定义的类型都可以通过type去定义。注意type要添加等号。Interface定义类型不需要添加等号。
下面代码是用type声明一个string类型的例子
type user=string //接收一个字符串类型的数据,返回一个user类型(字符串类型)的数据 function Input(str:string):user{ return str.slice(0,2) } //把返回结果赋值给userInput let userInput=Input('hello') //重新给其赋值一个字符串类型的值,没有报错,说明用type声明的字符串类型生效 userInput='new'
复制
下面代码是用interface声明一个对象类型的例子
interface Point{ x:number, y:number } //接收一个Point的对象类型数据 function printCoord(pt:Point){ } //给函数传一个对象类型的数据,没有报错,说明用interface声明的类型生效 printCoord({ x:100, y:100 })
复制
2、 Interface扩展接口:可以在interface后面添加关键字extends去扩展接口。类型别名type需要使用&符号去扩展接口
下面代码是用extends扩展接口的例子
//扩展接口 interface Animal{ name:string } interface Bear extends Animal{ honey:boolean } //声明一个类型为Bear类型的对象,要求既要有name,也要有honey。说明用extends扩展接口成功 const bear:Bear={ name:'winie', honey:true } console.log(bear.name); console.log(bear.honey);
复制
下面代码是用type扩展接口的例子
//扩展类型 type Animal={ name:string } //给Animal扩展接口 type Bear=Animal&{ honey:boolean } const bear:Bear={ name:'winie', honey:true }
复制
3、向现有类型添加新字段,interface可以通过定义同名的方式去扩展字段,类型别名type是不能通过同名的方式去进行扩展的。
下面代码是interface通过定义同名的方式向现有类型添加新字段
//向现有的类型添加新字段 interface MyWindow{ title:string } interface MyWindow{ count:number } const w:MyWindow={ title:'wz', count:666 }
复制
下面代码会报错,因为类型别名type是不能通过同名的方式去进行扩展的。
//类型创建后不能更改 type MyWindow={ title:string } type MyWindow={ }
复制