关于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 的返回值,就用了类型断言。

0
0

下一代前端开发语言 TypeScript从零重构axios

课程从零开始重构功能完整的JS库,是学习造轮子的不二之选!

2631 学习 · 877 问题

查看课程