angular - 如何修复类型 'permissions' 上不存在属性 'Navigator' ?

标签 angular typescript browser

虽然权限 API 还处于草案状态一段时间,但现在似乎得到了很好的支持。但 typescript 仍然给出属性'permissions'在类型'Navigator'上不存在。代码错误如下:

if (navigator.permissions) { 
    /* code */
}

navigator.permissions.query({name:'geolocation'})
    .then((result) => {
        /* code */
    })

如何在 Angular 7+ 应用程序中处理此问题?

这是我当前的tsconfig.json:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "resolveJsonModule": true,
    "sourceMap": true,
    "declaration": false,
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "types": [
      "node"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  }
}

最佳答案

最简单的答案是使用declare

可以为您的应用程序编写自定义类型声明,但由于这是一个全局浏览器变量,并且不会成为您的应用程序代码的一部分,因此更简单的路径可能对团队中的其他工程师更可持续和更容易理解。通过利用 Typescript declare 关键字,您可以通知编译器您正在使用现有变量、对象或库并指定其类型。

因此,对于 Angular 组件,declare 关键字可用于告诉 Typescript 全局变量(如 navigator)上的属性是可以的:

import { Component, OnInit } from '@angular/core';
...

declare const navigator: any;  // This is the declaration you add

@Component({
  selector: 'my-component',
  templateUrl: './my.component.html',
  styleUrls: ['./my.component.css'],
})
...

if (navigator.permissions) {   // Typescript is happy now
  ...
}

更多信息:

关于angular - 如何修复类型 'permissions' 上不存在属性 'Navigator' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65314648/

相关文章:

Angular Storybook Component 是两个模块错误的一部分

javascript - 使用 Node.js 创建 HTTPS 服务器

php - 通过机器人访问网站,但只有在浏览器/人类设置变量之后

javascript - Angular 2 Routerlink *ngIf 与参数

javascript - 类型范围输入的更改事件在 Angular2 IE 11 中不起作用

javascript - 我在 d3 v4 中制作可拖动的堆叠条形图时遇到问题。我面临的主要问题是拖动时 svg 的翻译

javascript - 尝试解析从 Observable 返回的错误

typescript - 使用 typescript 扩展 JQueryStatic

javascript - 关闭当前浏览器选项卡并关注特定 url 的浏览器选项卡 - javascript/jquery

Angular2 AoT - 不支持表达形式