如何在TypeScript中正确使用GeolocationPosition?

4
我们想要使用地理位置 API访问用户的位置。
这段代码片段可以正常工作:
if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition((position: GeolocationPosition) => console.log(position));
}

VSCode没有显示任何错误或警告,但是Angular CLI抛出了以下错误:

Cannot find name '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
  • typescript 4.0.2
此外,Angular CLI启用了严格的类型检查。
如何正确使用该API中的该类型和其他类型?

有时候,简单地让TS推断类型可能更容易一些:navigator.geolocation.getCurrentPosition((position) => console.log(position));。这样,TS会自动正确设置类型。 - Owen Kelvin
但是如果我将值传递给一个函数,比如 this.log(position);,而方法的定义如下:log(position: GeolocationPosition): void { console.log(position); },我仍然需要在函数定义中指定类型。如果我只是使用 log(position) { },编译器会报错说缺少 position 的类型,当我添加 :any 时,方法中的类型变为未知。希望你能理解我的困境,@OwenKelvin - lampshade
2个回答

9
在v4.0.x中运行TypeScript时,Position作为类型名称出现,但在4.1.x中似乎已被重命名为GeolocationPosition。找不到任何关于为什么这样做的文档。参见:https://dev59.com/mFEG5IYBdhLWcg3wct1F#66005573
建议升级到最新版本的TypeScript(目前为4.2.3)。

可以确认这个……谢谢 @MikeMurko - Oli

1
你应该能够使用原生的Position类型:
if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition((position: Position) => console.log(position));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接