在typescript中,我们定义对象的方式要用关键字interface(接口),我的理解是使用interface来定义一种约束,让数据的结构满足约束的格式。定义方式如下:
interface A{
name:string
}
let obja:A = {
name:"啊"
}
console.log(obja)
输出:{ name: '啊' }
interface A{
name:string
}
interface A{
age:number
}
//俩个接口名称一样则会合并 属性值name,age缺少一个则会报错
let obja:A = {
name:"啊",
age:18
}
console.log(obja)
输出:{ name: '啊', age: 18 }
interface P{
name:string,
age?:number //?可选式操作符 存在或不存在都可
}
let p:P = {
name : '1233'
}
console.log(p)
输出:{ name: '1233' }
[propName: string]
需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集:
interface P{
name:string,
age?:number,
[propName: string]: any;//string | number 如果是定义了属性则也要属性一致
}
let p:P = {
name : '1233',
a:"213",
c:"123"
}
console.log(p)
输出:{ name: '1233', a: '213', c: '123' }
readonly 只读属性是不允许被赋值的只能读取
//这样写是会报错的
//应为a是只读的不允许重新赋值
interface Person {
b?: string,
readonly a: string,
[propName: string]: any;
}
const person: Person = {
a: "213",
c: "123"
}
person.a = 123
interface P{
name:string,
age?:number,
cb():number|void,
[propName: string]: any; //string | number 如果是定义了属性则也要属性一致
}
let p:P = {
name : '1233',
a:"213",
c:"123",
cb:():number|void => {
// return 123;
}
}
console.log(p)
输出:{ name: '1233', a: '213', c: '123', cb: [Function: cb] }
interface Q{
name:string
}
interface W extends Q {
age:number
}
let e:W = {
name:'zhangsan',
age:18
}
console.log(e)
输出:{ name: 'zhangsan', age: 18 }
评论 (0)