【发布时间】:2019-08-07 17:50:50
【问题描述】:
我只是想更好地了解以下错误:
将“A”类型转换为“B”类型可能是错误的,因为两者都不是 类型与其他类型充分重叠。
然后当我尝试做一些测试时,我得到了一个奇怪的错误。
这些是我们的代码:
type User = {
id: string
username: string
age?: number
}
const user1 = {
id: '123',
username: 'user',
} as User // OK
const user2 = {
id: '123',
username: 'user',
age: 5
} as User // OK
const user3 = {
id: '123',
username: 'user',
age: 5,
email: '1234'
} as User // OK
const user4 = {
id: '123',
username: 'user',
age: '5',
} as User // Error, the age type is different
这些测试看起来很简单。
但是当我尝试这些时:
const user5 = {
username: 'user',
age: 5,
} as User // OK even though the ID is not exist
// Weird part
const user6 = {
username: 'user',
age: 5,
email: '123'
} as User // Error, when we add unknown field without Id field
`
基于user5,断言是正确的。但在user6 中,我不明白。这里有人可以帮助我了解发生了什么吗?谢谢。
【问题讨论】:
-
您在
user6中添加了email,这在您的定义中不存在。缺少“id”看起来像是试图强制将结构映射到类型并失败。在user3上,您有一个完整的定义 plus 多余的字段(看起来好像被忽略了)。 -
请查看
strictFunctionTypes(也可以在tsconfig文件中配置)typescriptlang.org/docs/handbook/release-notes/… -
不应该将类型定义为
const user: User而不是类型转换吗? -
@scgough 是的,我是这么认为的。
-
太棒了!我希望你在完成后分享你的见解:)
标签: javascript typescript