打字稿声明第三方模块

Sam*_*adi 14 javascript declare typescript

我怎么能声明一个如下所示的第三方模块:

在第三方模块中:

module.exports = function foo(){
  // do somthing
}
Run Code Online (Sandbox Code Playgroud)

在我的代码中:

import * as foo from 'foo-module'; // Can not find a declaration module for ...
foo();
Run Code Online (Sandbox Code Playgroud)

Aar*_*all 24

查看有关使用第三方模块文档.

如何编写声明在很大程度上取决于模块的编写方式和导出的内容.您给出的示例实际上并不是有效的ES6模块,因为ES6无法将函数导出为模块(它只能导出函数成员或默认函数).

你可以module.exports = ...在这样的esModuleInterop文件中声明你:

{
  "compilerOptions" {
    ...
    "esModuleInterop": true,
    ...
   }
}
Run Code Online (Sandbox Code Playgroud)

并按照您的意愿导入:

declare module "foo-module" {
  function foo(): void; 
  export = foo;
}
Run Code Online (Sandbox Code Playgroud)

或者像这样:

import * as foo from "foo-module";
foo();
Run Code Online (Sandbox Code Playgroud)

文档在声明文件各种声明文件的一些模板上有很好的资源.


Mic*_*ich 6

我有类似的问题。并努力向我的项目添加类型定义。最后,我通过以下步骤实现了它。

\n

这是一些模块(只有常量),我们称它为some-module- node_modules/some-module/index.js。

\n
'use strict';\n\nexports.__esModule = true;\nvar APPS = exports.APPS = {\n    ona: 'ona',\n    tacq: 'tacq',\n    inetAcq: 'inetAcq'\n};\n
Run Code Online (Sandbox Code Playgroud)\n

首先我添加到 tsconfig.jsonbaseUrltypeRoots

\n
{\n  ...\n  "compilerOptions": {\n    ...\n    "baseUrl": "types",\n    "typeRoots": ["types"]\n  }\n  ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

types其次,在我的项目根目录中,我为模块创建具有相同文件夹结构的文件夹types/some-module/index.js文件夹并放置代码:

\n
declare\xc2\xa0module\xc2\xa0'some-module' {\n    type Apps =  {\n        ona: string;\n        tacq: string;\n        inetAcq: string;\n    };\n    let APPS: Apps\n}\n
Run Code Online (Sandbox Code Playgroud)\n

最后我可以将它导入到我的my-file.ts打字将其导入!

\n
import { APPS } from 'some-module';\n
Run Code Online (Sandbox Code Playgroud)\n