Как я могу определить типы для внешних библиотек. TypeScript, Angular и Google Picker

Я пытаюсь использовать API Google Picker в своем приложении Angular 4. Чтобы иметь возможность использовать функции Google Picker, мне нужно импортировать библиотеку, и я делаю это в своем файле index.html.

индекс.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. Как я могу решить эту проблему? Спасибо!


person Lucas David Ferrero    schedule 26.10.2017    source источник


Ответы (2)


Дополняя ответ CRice,

вы ищете npm install @types/google.picker @types/gapi.client --save-dev

person Joe Leiman    schedule 04.12.2017

Возможно, кто-то уже написал типы для этой библиотеки. Вы должны проверить этот репозиторий, который содержит определения для многих библиотек. Обычно вы можете установить эти определения с помощью npm install @types/<library-name> --save-dev.

В противном случае, если еще нет написанного определения и вы просто хотите продолжить работу, вы можете отключить машинописный текст, объявив библиотеку как any, т.е. declare const google: any; в верхней части вашего файла. Но если вы сделаете это, вы потеряете всю безопасность типов при использовании библиотеки.

person CRice    schedule 26.10.2017