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
对于这样的函数接口,会检查函数的参数类型,假如参数类型符合,那么你多几个参数也行。还会检查函数的返回值类型是否匹配
想问下老师,以上总结得对吗(好像之前得课程没有涉及到这样得规则?我很容易滥用类型断言)