1. interface 和 type 类型别名
//(1)interface
interface a{
x:number,
y:string
}
//给这个变量加上类型注解
var b:a = {
x:1,
y:'2'
};
/*还可以添加一些属性
1.readonly 是一个只读属性
2. ? 添加问号,可以规定这个属性可以不定义,
3. [prposName :string]:any 如果你不确定后续还会有什么属性传入,设置这个。
*/
// (1) readonly
interface interfaceB {
// readonly 表示id 是一个只读属性,下面修改了id,就会报错。如果想不报错就需要去掉readonly。
readonly id: number
}
var interfaceA :(data:interfaceB)=> void = (data)=>{
//下面报错:无法分配到 "id" ,因为它是只读属性。
data.id = 12
}
// (2) ?
interface interfaceC {
id: number,
//如果把?去掉,就会报错,告诉你interfaceD缺少name属性,因为interfaceC需要该属性
name?: string
}
var interfaceD:interfaceC = {
id:1
}
// (3)[prposName :string]:any
// 注意:如果有些属性多余的,你这样传对象没问题,如果以字面量形式传就会报错没有设置多余属性
interface interfaceS {
name:string
}
var interfaceG :(data:interfaceS)=> void = (data)=>{
console.log(data)
}
//对象形式传入
var interfaceE = {
name : 'zqc',
super : 'body'
}
interfaceG(interfaceE)
//字面量形式传入,下面传入形式会报错。(传入字面量这样会进行强校验,发现多出东西就会报错。)
/*interfaceG({
name : 'zqc',
super : 'body'
})*/
/*如果后期还需要其他变量加入,可以在类型里面加[prpoName :string]:any 。这样上面就不会报错了。*/
// interface 继承 extends
interface jichengA {
name : string
}
//b继承了a里面的name属性。
interface jichengB extends jichengA {
set():string
}
var jichengC = (data:jichengB)=>{
console.log('继承')
}
//调用时必须传入name,不然就会报错
jichengC({
name:'zqc',
set(){ return 'set' }
})
//(2)type
type biemingA = string
var biemingB:biemingA = '12'
// interface 和 type 类型别名的区别 :
// type 可以设置简单的类型,interface 只能设置对象的
typescript 学习 系列(三)
最新推荐文章于 2024-04-22 23:18:29 发布