- Published on
TypeScript 类型兼容
- Authors

- Name
- 叫我小N就好啦
- GitHub
- @MinorN
TypeScript——类型兼容
为什么要有类型兼容?
因为实际工作中往往无法做到类型一致
const config = {
a: 1,
b: 2,
c: 3,
d: 4
}
// 比如test 只需要三个属性
const test = ({a,b,c})=>{
creturn a + b + c
}
const newConfig = lodash.pick(config,['a','b','c'])
// lodash.pick 表示从config里面取key = a b c
test(config)
test(newConfig)
什么是类型兼容
通俗来讲,你有的,我都有,我有的,你没有
Eg:y有的,x都有,那么x兼容y,任何用y的地方都能用x
type A = string | number
const a: A = 'hi'
接口如何兼容
常用的就是父子接口的兼容
interface baba {
name: string
}
interface erzi extends baba {
age: number
}
let objChild: erzi = {
name: 'MinorN',
age: 18,
}
let objParent: baba
objParent = objChild
函数如何兼容
函数有参数和返回值
- 参数个数不同,能兼容吗?
let one = (a: number) => {
//
}
let two = (a: number, b: number) => {
//
}
two = one // 不报错
one = two // 报错
// 想想,写JS的时候是不是会少写参数?
arr.forEach((item, index, arr) => {}) // 是不是很少用到第三个参数?
- 参数类型不同,能兼容吗?
interface Event {
targer: string
}
interface MouseEvent extends Event {
x: number
y: number
}
let listener = (e: Event) => {}
let mouseListener = (e: MouseEvent) => {}
mouseListener = listener
listener = mouseListener // 报错