【问题标题】:Adding @google-cloud/logging in typescript functions project gives error在 typescript 函数项目中添加 @google-cloud/logging 会出错
【发布时间】:2018-08-24 10:09:21
【问题描述】:

编辑: 对于有同样问题的其他人 - 在课堂主体中使用 const Logging: any = require('@google-cloud/logging')var logger = Logging() 就像一个魅力!

记得使用var logger = Logging() 来实例化记录器库。否则你仍然会得到 logger.log is not a function

原帖

我有一个 firebase 函数项目,用 typescript 编写 - 使用 webpack 编译。我目前正在尝试实现 @google-cloud/logging 库,但我遇到了问题。它出来说

找不到模块“google-cloud/logging”的声明文件。尝试npm install @types/@google-cloud/logging(如果存在)或添加包含declare module '@google-cloud/logging'; 的新声明(.d.ts)文件

我尝试通过以下方式添加库:

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”文件添加到项目中取得了成功,尽管我不太了解它。这是堆栈溢出文章的链接-Importing non-typescript module in typescript

如何在打字稿项目中添加库?

如果需要,我可以提供更多详细信息。这是我能想到的。

【问题讨论】:

  • 你的构建工具是什么(typesript 编译器、webapck、rollup、gulp、fusebox ...)?你的tsconfig.json 文件是什么?

标签: typescript firebase google-cloud-functions google-cloud-logging


【解决方案1】:

@google-cloud/logging 还没有类型定义。所以你需要提供一些! 同时,你可以这样做

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

如果您安装了@types/node 并以nodejs为目标如果您以浏览器为目标但使用"moduleResolution": "CommonJS"(您还需要提供节点类型)。

否则,你可以使用

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
}

这个定义只是一个草稿,缺少很多功能,但我想这是必要的第一步:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多