关于接口的疑惑
来源:3-11 接口 - 额外属性检查+函数类型+可索引的类型

小学生6年级
2019-04-28
interface Person {
firstName: string
lastName: string
}
// 报错
let p: Person = {firstName: 'a', lastName: 'b', fullName: 'ab'}
// 正确
function sayHel(person: Person) {
return 'Hello ' + person.firstName + ' ' + person.lastName
}
const user = {
firstName: 'a',
lastName: 'b',
fullName: 'ab'
}
sayHel(user)
这两个情况不是一样的么,为什么一个报错另一个不报错?是因为函数参数逆变?
写回答
1回答
-
ustbhuangyi
2019-04-28
正如课程所说的那样,如果直接用对象字面量,TypeScript 编译器就能检查出额外的属性会报错,但是如果用了一个变量,就检测不出来了。
如果你直接调用
sayHel({
firstName: 'a',
lastName: 'b',
fullName: 'ab'
})
也是会报错的。
虽然用变量检测不出来,但这也是有危险的,所以通常如果我们有额外的属性,要么为接口添加索引签名,要么修改接口的定义。00
相似问题