【问题标题】:Cannot convert type 'number' to type '0'无法将类型“数字”转换为类型“0”
【发布时间】:2017-09-04 17:25:42
【问题描述】:

谁能帮我理解和解决这个错误?

vehicleId = mapping.VehicleId;

此行以红色高亮显示错误

无法将类型“数字”转换为类型“0”

  • vehicleId 类型为number
  • mapping.VehicleId 类型为number [但标记为可选]

这里的要求是定义这些变量/属性的确切方式:

在功能块中:

let vehicleId = 0;

在映射中(注意这是通过 HTTP 请求设置的,而不是在代码中):

VehicleId?: number;

【问题讨论】:

  • 添加声明vehicleIdmapping.VehicleId类型的代码部分,以及为mapping.VehicleId赋值的部分
  • @NitzanTomer 谢谢,更新了问题
  • 你用的是什么版本的打字稿?
  • 在 Typescript 中,每个数字值也是一种类型,因此您可以键入 0 类型的内容,然后分配将无效。例如let p:0 = 0; let d: number = 10; p = d; 将导致错误。但是,至少在 ts 2.5 中,当您编写 let v = 0 时,v 将输入编号而不是类型 0。您认为您可以重新创建一个完整的最小示例吗?
  • 我已经删除了答案,因为我也签入了 VS,它说的是数字,我想我可能是错的 :)

标签: typescript visual-studio-2017


【解决方案1】:

在 Typescript 中,每个数字值也是一个类型,因此当您编写 let vehicleId = 0; 时,它将被键入类型 0。那么除了具有相同类型的东西(即0)之外,您不能为变量分配任何东西。这有点令人困惑,但有一些用途。试试看:

let vehicleId:number = 0;

let vehicleId = 0 as number;

【讨论】:

  • "当你写时 let vehicleId = 0; 它会被输入类型为 0" -- 这是不正确的,let vehicleId = 0 总是会创建一个@类型的变量987654328@,可以在这个demo验证。问题是在某处,vehicleId 被明确定义为let vehicleId: 0,这不是对值0 的赋值,而是将类型设置为数字文字(在这种情况下,只能是0 )。这很可能是 OP 的错字。
  • @JohnWeisz 这不是错字 - 我仔细检查了。 VS 说它是一个数字,但只有在将其类型指定为数字后,错误才会消失。
  • @Chris 你用的是什么版本的打字稿?
  • @Chris 然后我担心配置不正确,或者问题来自其他地方。您可以在演示中验证将任何数字文字分配给隐式类型变量将始终创建一个number(除非做一些疯狂的事情,比如let a = 3 as 0)。
  • 已安装 2.2 版,但我的项目中运行的是 2.1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多