以下两种方式传参,第一种方式正常运行,第二种会导致报错;出现这种现象的原因是什么?
`
interface IName {
firstName: string;
lastName: string;
}
function getFullName(name: IName): string {
return `${name.firstName} ${name.lastName}`;
}
const params = {
firstName: '宇智波',
lastName: '斑',
age: 100
}
// 写法1 正产运行
getFullName(params);
// 写法2 报错
//类型“{ firstName: string; lastName: string; age: number; }”的参数不能赋给类型“IName”的参数。
// 对象文字可以只指定已知属性,并且“age”不在类型“IName”中。
getFullName({
firstName: '宇智波',
lastName: '斑',
age: 100
});
`
后者属于额外的属性检查,在 TS 中设计如此(为什么这么设计你可以自行谷歌
鸭式辨型法
)。当将对象字面量赋值给变量或作为参数传递时,如果对象字面量存在任何目标类型不包含的属性时,会抛出错误。
你可以使用类型断言: