如何为第三图书馆添加打字文件?

时间:2018-07-25 05:53:03

标签: typescript type-declaration

我正在使用没有声明文件types的第三个库。因此,我需要在项目中添加库的类型。

但是我尝试了很多次,结果总是错误的。

这是我的tsconfig.json

{
  "compilerOptions": {
    "baseUrl": ".",
    "esModuleInterop": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "removeComments": true,
    "sourceMap": true,
    "target": "esnext",
    "types": ["node"],
    "strict": true,
    "paths": {
      "@/*": ["src/*"]
    }
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "**/node_modules/*", "**/*.spec.ts"]
}

我在根项目中创建了一个global.d.ts文件,并声明了该模块:

declare module 'matrix-js-sdk' {
  interface Promise {
    done(callback: () => void): void
  }

  interface Client {
    joinRoom(roomId: string): Promise
  }

  export function createClient(options: {
    baseUrl: string
    accessToken: string
    userId: string
  }): Client
}

导入第三个库:

import sdk from 'matrix-js-sdk'
// error: Cann't find the declaration file for the module 'matrix-js-sdk'

此外,我还尝试创建root/src/@types/matrix-js-sdk/index.d.ts文件并编写声明:

interface Promise {
  done(callback: () => void): void
}

interface Client {
  joinRoom(roomId: string): Promise
}

export function createClient(options: {
  baseUrl: string
  accessToken: string
  userId: string
}): Client

但是它永远都行不通。


==================更新=================== < / p>

现在我可以在src/global.d.ts (不是根项目)中编写声明,并引用它以包含在编译中:

/// <reference path="../global.d.ts" />

import sdk from 'matrix-js-sdk'

但是不建议使用reference语法,我尝试在 tsconfig.json src/global.d.ts字段中包含files

"files": ["src/global.d.ts"],
"include": ["src/**/*"],
"exclude": ["node_modules", "**/node_modules/*", "**/*.spec.ts"]

它再次引发相同的错误:

Could not find a declaration file for module 'matrix-js-sdk'

另一个src/@types/matrix-js-sdk/index.d.ts仍然不起作用(我更喜欢使用这种方式)。

1 个答案:

答案 0 :(得分:1)

你能不能放

declare module 'matrix-js-sdk' {
  interface Promise {
    done(callback: () => void): void
  }

  interface Client {
    joinRoom(roomId: string): Promise
  }

  export function createClient(options: {
    baseUrl: string
    accessToken: string
    userId: string
  }): Client
}

src/@types/matrix-js-sdk/index.d.ts

声明文件中也没有默认导出,因此import sdk from...会给出一些与此相关的错误。