【问题标题】:Typescript error on converting type into different type将类型转换为不同类型时出现打字稿错误
【发布时间】: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


【解决方案1】:

除非启用 TypeScript strict null checks,否则 nullundefined 可以分配给任何类型。在您的user5 测试中,id 隐含地为undefined,编译器对此感到满意。

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 1970-01-01
    • 2018-08-12
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多