请稍等 ...
×

采纳答案成功!

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

关于接口的疑惑

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)

这两个情况不是一样的么,为什么一个报错另一个不报错?是因为函数参数逆变?

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

1回答

ustbhuangyi 2019-04-28 13:06:07

正如课程所说的那样,如果直接用对象字面量,TypeScript 编译器就能检查出额外的属性会报错,但是如果用了一个变量,就检测不出来了。

如果你直接调用

sayHel({
   firstName: 'a',
   lastName: 'b',
   fullName: 'ab'
})

也是会报错的。

虽然用变量检测不出来,但这也是有危险的,所以通常如果我们有额外的属性,要么为接口添加索引签名,要么修改接口的定义。

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