侧边栏壁纸
博主昵称
404

  • 累计撰写 17 篇文章
  • 累计收到 0 条评论
ts

ts接口和对象

404
404
2022-07-27 / 0 评论 / 20 阅读 / 正在检测是否收录...
在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

评论 (0)

取消