typescript types 和 interface 用法相同点和不同点整理
Interface 和 Types 都可用来规范对象
interface User {
name: string
age: number
setAge(age: number) : void
}
type User = {
name: string
age: number
setAge(age: number): void
}
type User = (age:number) => void
let u: User = {
name: 'jack',
age: 30,
setAge(c) {
this.age = c
}
}
- type 的特有用法
type Name = string // type 可设置原始类型
// 联合类型
type PointX = {
x: number
}
type PointY = {
y: number
}
type Point = PointX | PointY
// test
let p: Point = {
x: 10,
y: 2
} // ok
// 组合成tuple
type tuple = [number, string]
let t: tuple = [1, '1']
- interface 特有用法
// interface 自动merging
interface User { name: string }
interface User { age: number }
let u: User = {
name: 'zz',
age: 2
} // 参数必须都要有
- extends
Interface extends interface
interface PointX { x: number }
interface Point extends PointX { y: number }
let p: Point = {
x: 1,
y: 1
}
Type alias extends type alias
type PartialPointX = { x: number }
type Point = PartialPointX & { y: number }
let p: Point = {
x: 1,
y: 1
}
Interface extends type alias
type PartialPointX = { x: number }
interface Point extends PartialPointX { y: number }
let p: Point = {
x: 1,
y: 1
}
Type alias extends interface
interface PartialPointX { x: number }
type Point = PartialPointX & { y: number }