Добавление @ google-cloud / logging в проект функций машинописного текста дает ошибку

РЕДАКТИРОВАТЬ: для других с той же проблемой - использование const Logging: any = require('@google-cloud/logging') вместе с var logger = Logging() в теле класса сработало как шарм!

Не забудьте использовать var logger = Logging() для создания экземпляра библиотеки регистратора. В противном случае вы все равно получите logger.log не функция!

Исходное сообщение

У меня есть проект функций firebase, написанный на машинописном тексте - перенесенный с помощью webpack. В настоящее время я пытаюсь реализовать библиотеку @ google-cloud / logging, но у меня возникают проблемы. Выходит, говоря

Не удалось найти файл декларации для модуля "google-cloud / logging". Попробуйте npm install @types/@google-cloud/logging, если он существует, или добавьте новый файл декларации (.d.ts), содержащий declare module '@google-cloud/logging';

Я пробовал добавить библиотеку следующими способами:

import * as Logging from '@google-cloud/logging';
import * as logging from '@google-cloud/logging';
import { Logging } from '@google-cloud/logging';

Но я все еще получаю эту ошибку. Попытка запустить функцию, использующую "ведение журнала", приводит к

logging.log не является функцией

Я даже пробовал использовать javascript для запроса библиотеки, но безуспешно.

Мой tsconfig.json:

{
    "compilerOptions": {
        "target": "es6",
        "module": "commonjs",
        "outDir": "./",
        "noImplicitAny": true
    },
    "include": [
        "src/**/*.ts"
    ],
    "exclude": [
        "node_modules"
    ]
}

Я читал, что некоторые люди добивались успеха, добавляя файл «d.ts» в проект вручную, хотя я многого из этого не понимал. Вот ссылка на статью в переполнении стека - Импорт модуля без машинописного текста в машинописный текст

Как я могу добавить библиотеку в проект машинописного текста?

При необходимости я могу предоставить более подробную информацию. Это было то, о чем я мог подумать.


person ChrisEenberg    schedule 16.11.2017    source источник
comment
Какой у вас инструмент сборки (компилятор машинописных шрифтов, webapck, rollup, gulp, fusebox ...)? Какой у вас tsconfig.json файл?   -  person Jules Sam. Randolph    schedule 16.11.2017


Ответы (1)


Для @google-cloud/logging еще нет определений типов. Так что вам нужно их предоставить! А пока вы можете сделать

const Logging: any = require('@google-cloud/logging')

Если у вас установлен @types/node и нацелены на nodejs или, если вы нацеливаетесь на браузер, но используете "moduleResolution": "CommonJS" (вам также необходимо предоставить node typefs).

В противном случае вы можете использовать

import * as Logging from '@google-cloud/logging'

Но в этом случае вам нужно объявить типы для этого модуля

// logging.d.ts
declare module '@google-cloud/logging' {

  interface LogConfig {
    removeCircular: boolean
  }

  class Entry {
    metadata: object
    data: object
    constructor (metadata: object | null | undefined, data: object | string)
    constructor (data: object | string)
    toJSON (options?: LogConfig): any
  }

  interface WriteOptions {
    gaxOptions: object
    labels: object[]
    resource: object
  }

  type LogWriteCallback = (err: Error | null, apiResponse: object) => void
  type DeleteLogCallback = (err: Error | null, apiResponse: object) => void

  type LogWriteResponse = object[]
  type DeleteLogResponse = object[]

  type EntryArg = Entry | Entry[]

  class Log {
    constructor (logging: Logging, name: string, options: LogConfig)
    alert (entry: EntryArg, options?: WriteOptions, callback?: LogWriteCallback): Promise<LogWriteResponse>
    critical (entry: EntryArg, options?: WriteOptions, callback?: LogWriteCallback): Promise<LogWriteResponse>
    debug (entry: EntryArg, options?: WriteOptions, callback?: LogWriteCallback): Promise<LogWriteResponse>
    emergency (entry: EntryArg, options?: WriteOptions, callback?: LogWriteCallback): Promise<LogWriteResponse>
    info (entry: EntryArg, options?: WriteOptions, callback?: LogWriteCallback): Promise<LogWriteResponse>
    notice (entry: EntryArg, options?: WriteOptions, callback?: LogWriteCallback): Promise<LogWriteResponse>
    warning (entry: EntryArg, options?: WriteOptions, callback?: LogWriteCallback): Promise<LogWriteResponse>
    error (entry: EntryArg, options?: WriteOptions, callback?: LogWriteCallback): Promise<LogWriteResponse>
    write (entry: EntryArg, options?: WriteOptions, callback?: LogWriteCallback): Promise<LogWriteResponse>
    delete (gaxOptions: object): Promise<DeleteLogResponse>
    delete (gaxOptions: object, callback?: DeleteLogCallback): Promise<DeleteLogResponse>
    delete (callback?: DeleteLogCallback): Promise<DeleteLogResponse>
  }

  interface ClientConfig {
    projectId?: string
    keyFilename?: string
    email?: string
    credentials?: {
      client_email: string
      private_key: string
    }
    autoRetry?: boolean
    maxRetries?: number
    promise?: Function
  }

  class Logging {
    constructor (options: ClientConfig)
    log (name: string, options?: LogConfig): Log
    entry (resource: object | string | null | undefined, data: object | string): Entry
  }
  export = Logging
}

Это определение - всего лишь набросок, и многие функции отсутствуют, но я думаю, что это необходимый первый шаг :-)

person Jules Sam. Randolph    schedule 16.11.2017