对象
基本使用
JS 中的对象是由属性和方法构成的,而 TS 对象的类型就是在描述对象的结构(有什么类型的属性和方法)
对象类型的写法:
// 对象类型
type Person = {
name: string,
age: number,
gender: string,
hobby: string,
girlFriend?: string, // ? 表示可选属性
// sayHi: (content: string) => void
sayHi(content: string): void
}
// ts 就像在写注释, 以前写的注释是给程序员看的, ts 写的类型是给编辑器看的, 程序员也可以看
let obj1: Person = {
name: '吕布',
age: 28,
gender: '男',
hobby: '戏貂蝉',
girlFriend: '大乔',
sayHi(content) {
console.log('gello:' + content)
}
}
对象可选属性
- 对象的属性或方法,也可以是可选的,此时就用到可选属性了
- 比如,我们在使用 axios({ ... }) 时,如果发送 GET 请求,method 属性就可以省略
- 可选属性的语法与函数可选参数的语法一致,都使用
?来表示
type Config = {
url: string
method?: string
}
function myAxios(config: Config) {
console.log(config)
}
接口类型
当一个对象类型被多次使用时,一般会使用接口( interface)来描述对象的类型,达到复用的目的
- 使用 interface 关键字来声明接口
- 接口名称(比如,此处的 IPerson),可以是任意合法的变量名称,推荐以 I 开头
- 声明接口后,直接使用接口名称作为变量的类型
- 因为每一行只有一个属性类型,因此,属性类型后没有 ;(分号)
interface IPerson {
username: string
age: number
gender: string
sayHi: () => void
}
const p1: IPerson = {
username: '李连杰',
age: 38,
gender: '未知',
sayHi() {
console.log('曾经的世界武术冠军')
}
}
p1.sayHi()
interface 和 type的对比
相同点:都可以给对象指定类型
不同点:
- 1.接口,只能为对象指定类型
- 2.类型别名,不仅可以为对象指定类型,实际上可以为任意类型指定别名
推荐:能使用 type 就是用 type
接口继承
如果两个接口之间有相同的属性或方法,可以将公共的属性或方法抽离出来,通过继承来实现复用
使用 extends (继承)关键字实现了接口 objA 继承 objB
interface IPerson {
username: string
age: number
gender: string
sayHi: () => void
}
const p1: IPerson = {
username: '刘帮',
age: 38,
gender: '未知',
sayHi() {
console.log('我是榜一刘帮, i\'m rich')
}
}
p1.sayHi()
// 接口继承: IStudent 具备 IPerson 的所有约束规则
interface IStudent extends IPerson {
score: number
sleep: () => void
}
const s1: IStudent = {
username: '刘颖',
age: 18,
gender: '男',
sayHi() {
console.log('我是榜一刘颖, i\'m rich')
},
score: 59,
sleep() {
console.log('刘颖正在睡觉...')
},
}
s1.sayHi()
s1.sleep()
使用 type 实现和 interface 类似继承的效果
type Person = {
username: string
age: number
gender: string
sayHi: () => void
}
// & 与连接符: 既要满足前面的也要满足后面的
// | 或连接符: 满足其中一个即可
type Student = {
score: number
sleep: () => void
} & Person
const s2: Student = {
username: '刘子昂',
age: 28,
gender: '未知',
sayHi() {
console.log('大嘎好!')
},
score: 80,
sleep() {
console.log('我在睡觉')
},
}









网友评论