接口和对象类型

对象的类型

interface Person {
    age: number
    name: string
}

const p: Person = {
    age: 18,
    name: 'mk'
}

// 重名interface  可以合并
interface A {
    name: string
}

interface A {
    age: number
}

const a: A = {
    name: 'mk',
    age: 18
}

// 继承
interface A{
    name: string
}

interface B extends A{
    age: number
}

let b:B = {
    age: 18,
    name: "mk"
}

可选属性 使用?操作符

interface Person {
    age?: number
    name: string
}

const p: Person = {
    name: 'mk'
}

任意属性 [propName: string]

interface Person {
    age?: number
    name: string
    [propName: string]: any
}

const p: Person = {
    name: 'mk',
    sex: 'boy'
}

只读属性 readonly

readonly 只读属性是不允许被赋值的只能读取

interface Person {
    readonly sex: string
    [propName: string]: any
}

const p: Person = {
    sex: 'boy',
    name: 'mk'
}

p.sex = 'girl'

需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集

添加函数

interface Person {
    cb: () => void
}

const p: Person = {
    cb: () => {
        console.log('person')
    }
}
贡献者: mankueng