【问题标题】:How can I define types for external libraries. TypeScript , Angular and Google Picker如何定义外部库的类型。打字稿,角度和谷歌选择器
【发布时间】:2017-12-04 21:58:38
【问题描述】:

我正在尝试在我的 Angular 4 应用中使用 Google Picker API。 为了能够使用 Google Picker 的功能,我必须导入库,并在我的 index.html 文件中进行。

index.html:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="theme-color" content="#2185d0">
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  <title>Librostic</title>
  <base href="/">

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
  <script src="https://use.fontawesome.com/18845e1b3c.js"></script>

  <link href="https://fonts.googleapis.com/css?family=Alfa+Slab+One" rel="stylesheet">
</head>
<body>
  <app-root>
  </app-root>
  <!-- See the bellow script -->
  <script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script> 
</body>

<script>
  $('.ui.dropdown')
    .dropdown()
  ;
</script>
</html>

所以问题是我尝试使用一些方法,因为 Typescript 不知道那是什么。 让我们看一个例子。 我得到了以下功能:

function createPicker() {
      if (pickerApiLoaded && oauthToken) {
        // Here I get errors like: Cannot find name 'google'.
        var view = new google.picker.View(google.picker.ViewId.DOCS);
        view.setMimeTypes('application/pdf');
        var picker = new google.picker.PickerBuilder()
          .enableFeature(google.picker.Feature.NAV_HIDDEN)
          .enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
          .setAppId(appId)
          .setOAuthToken(oauthToken)
          .addView(view)
          .addView(new google.picker.DocsUploadView())
          .setDeveloperKey(developerKey)
          .setCallback(pickerCallback)
          .build();
        picker.setVisible(true);
      }
    }

这只是一个 TypeScript 错误,意味着该函数在没有 TS 编译器的情况下执行。我怎么解决这个问题? 谢谢!

【问题讨论】:

    标签: angular typescript google-picker


    【解决方案1】:

    增强 Crice 的答案,

    您正在寻找npm install @types/google.picker @types/gapi.client --save-dev

    【讨论】:

      【解决方案2】:

      可能有人已经为此库编写了类型。您应该查看this repo,其中包含许多库的定义。您通常可以使用npm install @types/&lt;library-name&gt; --save-dev 安装这些定义。

      否则,如果尚未编写任何定义并且您只想继续进行操作,则可以通过将库声明为 any 来使 typescript 静音,即文件顶部的declare const google: any;。但是如果你这样做了,你会在使用这个库时失去所有的类型安全性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-27
        • 2018-12-03
        • 1970-01-01
        • 2019-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        相关资源
        最近更新 更多