【发布时间】:2018-11-15 14:21:31
【问题描述】:
我不明白为什么这个 TypeScript 代码应该编译(TypeScript 2.8.3 所有严格检查)
我已将一个对象转换为 IUser 类型并包含一个不存在的属性“bob”
我已阅读有关超额支票的文档 - https://www.typescriptlang.org/docs/handbook/interfaces.html#excess-property-checks
但它仍然没有意义,这应该编译 - 鉴于我正在铸造它。
最终的问题是:我如何才能在这个对象上真正获得正确的类型 - 以便将其转换为具有非接口成员的对象(可能/可能的错字)应该无法编译。
interface IUser {
name: string
}
const func = (user: IUser) => {
alert(user)
}
func(<IUser> {
name: "bob",
bob: true
} as IUser)
【问题讨论】:
-
为什么需要类型断言('cast')失败?如果您有一个接受
IUser的函数并且您传递了{ name: "bob", bob: true },它将失败。 -
@cartant 我已经更新了代码,所以函数接收对象类型 IUser,它仍然可以编译
-
如果没有类型断言,它将失败。使用类型断言,您可以绕过多余的属性检查。
-
对,我不是强迫它遵守 IUser,而是无意中通过告诉编译器“别担心它是 IUser”来强迫它编译...
标签: typescript