【问题标题】:How to use GeolocationPosition correctly in TypeScript?如何在 TypeScript 中正确使用 GeolocationPosition?
【发布时间】:2021-04-24 23:49:13
【问题描述】:

我们希望使用Geolocation API 访问用户的位置。

这个 sn-p 工作正常:

if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition((position: GeolocationPosition) => console.log(position));
}

VSCode 也不会显示任何错误或警告,但 Angular CLI 会抛出此错误:

找不到名称“GeolocationPosition”。
navigator.geolocation.getCurrentPosition((position: GeolocationPosition) => console.log(position));

该项目正在使用以下内容:

  • Angular 11.0.6
  • tslib 2.0.0
  • ts-node 8.3.0
  • tslint 6.1.0
  • 打字稿 4.0.2

在 Angular CLI 中还启用了 strict 类型检查

如何正确使用此类型和该 API 中的其他类型?

【问题讨论】:

  • 有时更容易让 TS 推断类型 navigator.geolocation.getCurrentPosition((position) => console.log(position));。这样TS会自动正确设置类型
  • 但是如果我将值传递给一个函数,例如 this.log(position); 并且方法如下所示:log(position: GeolocationPosition): void { console.log(position); } 我仍然需要函数定义中的类型。如果我简单地使用log(position) { },编译器会说position 的类型丢失,当我添加:any 时,方法中的类型是未知的。希望你能理解我的困境,@OwenKelvin

标签: angular typescript w3c-geolocation


【解决方案1】:

在 v4.0.x 中运行 TypeScript 会显示 Position 作为类型名称,但在 4.1.x 中似乎已重命名为 GeolocationPosition。找不到任何关于他们为什么这样做的文档。请参阅:https://stackoverflow.com/a/66005573/510048

建议更新到最新版本的 Typescript(目前为 4.2.3)

【讨论】:

    【解决方案2】:

    你应该可以使用原生的Position类型:

    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition((position: Position) => console.log(position));
    }
    

    【讨论】:

      猜你喜欢
      • 2016-11-25
      • 2017-05-22
      • 1970-01-01
      • 2023-04-03
      • 2021-06-02
      • 2019-05-05
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      相关资源
      最近更新 更多