请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于TS的类型断言

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

对于这样的函数接口,会检查函数的参数类型,假如参数类型符合,那么你多几个参数也行。还会检查函数的返回值类型是否匹配

想问下老师,以上总结得对吗(好像之前得课程没有涉及到这样得规则?我很容易滥用类型断言)

正在回答 回答被采纳积分+3

1回答

ustbhuangyi 2020-07-02 23:38:00

嗯,总结的基本正确,但是类型断言尽量不要滥用,只有当一些复杂情况,TS 不能推断出类型的时候,用类型断言,比如课程中的 createInstance 的返回值,就用了类型断言。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信