如何为第三方模块使用声明

时间:2018-11-09 12:11:42

标签: typescript typescript-typings

我正在使用fingerprintjs2库,该库在definitelyTyped中的声明不完整且不兼容

我选择在我的项目中编写自己的声明,而我正在努力将该声明加载到代码中。我仍然遇到错误

  

找不到模块'fingerprintjs2'

在此导入语句中

import Fingerprint2, { TCallback, TComponent } from 'fingerprintjs2';

我的声明被编写为隔离模块

// ./src/@types/fingerprintjs2/index.d.ts

// ...some other exported types

export type TComponent = {
    key: string;
    value: string | number | boolean | string[];
};

export type TCallback = (components: TComponent[]) => void;

export default interface fingerprintjs2 {
    get(callback: TCallback): void;
    get(options: TOptions, callback: TCallback): void;
    getPromise(options: TOptions): Promise<TComponent[]>;
}

我的 tsconfig.json

{
    "include": ["src/**/*"],
    "exclude": ["node_modules"],
    "compilerOptions": {
        "allowSyntheticDefaultImports": true,
        "baseUrl": ".",
        "declaration": true,
        "declarationDir": "./dist",
        "lib": ["dom", "es5", "scripthost"],
        "module": "es6",
        "noImplicitAny": true,
        "outDir": "./dist",
        "paths": { "*": ["./src/@types*"] },
        "target": "es5"
    }
}

我没有找到明确的解释。你能给我个建议吗?感谢您的帮助。

我正在Webstorm 2018.2中使用Typescript 3.1.6

2 个答案:

答案 0 :(得分:0)

您需要设置typeRoots,以便它将拾取您的自定义类型文件夹。

来源:https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

类似的东西应该起作用:

"typeRoots": [
  "node_modules/@types",
  "src/@types"
]

答案 1 :(得分:0)

问题在于解决模块,我更改了 tscongif.json 编译器选项

++ "moduleResolution": "node",
-- "paths": { "*": ["./src/@types*"] },
++ "paths": { "*": ["./node_modules/*", "./src/@types/*"] },

然后解决了该模块。

我有一个错误,该模块仅输出类型,这是真的,我已经导出了interface。我必须首先实现该接口,然后导出实现的值。像这样

// declare const value with interface
declare const fingeprint: fingerprintjs2;
// export that const value
export default fingeprint;

现在看来可行。