接口 只定义对象应该包含哪些属性和函数,及其类型定义等,并不具体实现。相当于一个 复杂类型 或 结构约定。
1. 定义接口
用interface关键字声明一个接口。
interface Person {
firstName: string;
lastName: string;
}
function greet(person: Person) {
console.log('Hello, ' + person.lastName)
}
greet('lisa') // Error
greet({ firstName: 'Lisa' }) // Error, must have 'firstName' and 'lastName'
greet({ firstName: 'Lisa', lastName: 'Guo' }) // OK
为greet函数传参时的变量必须符合Person接口的定义,即:必须有firstName和lastName
2. 可选属性
可选属性表示实际对象可以包含也可以不包含该属性。
variable ?: type 变量后加?定义一个可选属性
interface Person {
firstName: string;
lastName?: string;
}
function greet(person: Person) {
console.log('Hello, ' + person.lastName)
}
greet({ firstName: 'Lisa' }) // OK, lastName is optional
greet({ firstName: 'Lisa', lastName: 'Guo' }) // OK
3. 只读属性
只读属性 表示该属性只在创建时可赋值
readonly variable: type 变量前加 readonly 声明一个只读变量
interface Person {
readonly firstName: string;
readonly lastName: string;
}
let user1: Person = { firstName: 'lisa', lastName: 'guo' }
user1.firstName = 'timo' // Error
只读数组ReadonlyArray<T>可以定义一个只读数组
let names: ReadonlyArray<string> = ['lisa', 'timo']
names.push('Zun') // Error
readonly vs const
最简单判断该用readonly还是const的方法是看要把它做为变量使用还是做为一个属性。 做为变量使用的话用const,若做为属性则使用readonly。











网友评论