关于TS的类型断言
来源:7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写

慕莱坞0998854
2020-07-01
TS的类型断言一直不是很清楚规则是什么,但是经过如下实验
interface Person {
name: string;
age:number
}
// ok
const me = {
name: 'a',
age: 12,
gender:'male'
} as Person
//error
const you = {
name: 'b',
gender:'male'
} as Person
//ok
const him = { name: 'c' } as Person
//ok
const she = {} as Person
对于普通的对象,似乎,在做类型断言的时候,可以比在包含interface所定义的属性的情况下多出一些属性,也可以只包含interface里面的某一些属性,甚至可以是{}这样的空对象(我一直感觉这个很神奇)。
但是,不能只包含interface里面定义的一部分属性但是又多出一些自定义的属性
interface Fn {
(name:string):number
}
//ok
const fn1: Fn = ((n:string,a:number) => {
return a
}) as Fn
//ok
const fn2: Fn = ((a:any) => {
return a
}) as Fn
//error
const fn3: Fn = ((a:number) => {
return a
}) as Fn
对于这样的函数接口,会检查函数的参数类型,假如参数类型符合,那么你多几个参数也行。还会检查函数的返回值类型是否匹配
想问下老师,以上总结得对吗(好像之前得课程没有涉及到这样得规则?我很容易滥用类型断言)
写回答
1回答
-
ustbhuangyi
2020-07-02
嗯,总结的基本正确,但是类型断言尽量不要滥用,只有当一些复杂情况,TS 不能推断出类型的时候,用类型断言,比如课程中的 createInstance 的返回值,就用了类型断言。
00
相似问题