[英]typescript declare third party modules
我如何声明一个看起来像这样的第三方模块:
在第三方模块中:
module.exports = function foo(){
// do somthing
}
在我的代码中:
import * as foo from 'foo-module'; // Can not find a declaration module for ...
foo();
如何编写声明在很大程度上取决于模块的编写方式和导出的内容。
您给出的示例是CommonJS模块( module.exports = ...
),它实际上不是有效的ES6模块,因为ES6无法将函数导出为模块 (它只能导出函数成员或默认函数)。
使用添加的esModuleInterop
编译器选项,您不再需要使用下面显示的“命名空间黑客”来查找具有非ES6兼容导出的CommonJS模块。
首先,确保你已经在esModuleInterop
中启用了tsconfig.json
(现在默认包含tsc --init
):
{
"compilerOptions" {
...
"esModuleInterop": true,
...
}
}
在.d.ts
文件中声明你的foo-example
如下:
declare module "foo-module" {
function foo(): void;
export = foo;
}
现在您可以将其导入为您想要的命名空间:
import * as foo from "foo-module";
foo();
或者作为默认导入:
import foo from "foo-module";
foo();
您可以在.d.ts
文件中声明您的foo-example
,如下所示:
declare module "foo-module" {
function foo(): void;
namespace foo { } // This is a hack to allow ES6 wildcard imports
export = foo;
}
并按照您的意愿导入:
import * as foo from "foo-module";
foo();
或者像这样:
import foo = require("foo-module");
foo();
你声明了这个功能:
声明var foo:any;
这将告诉Typescript,你有一个名为foo的函数,你将确保在网站上注入。
我遇到了类似的问题。 并努力为我的项目添加类型定义。 最后我想到了。
这是一些模块(只有常量),我们称之为some-module
- node_modules / some-module / index.js。
'use strict';
exports.__esModule = true;
var APPS = exports.APPS = {
ona: 'ona',
tacq: 'tacq',
inetAcq: 'inetAcq'
};
首先,我添加到tsconfig.json baseUrl
和typeRoots
{
...
"compilerOptions": {
...
"baseUrl": "types",
"typeRoots": ["types"]
}
...
}
在我的项目根目录中,我为模块types/some-module/index.js
创建具有相同文件夹结构的文件夹types
并放置代码:
declare module 'some-module' {
type Apps = {
ona: string;
tacq: string;
inetAcq: string;
};
let APPS: Apps
}
最后我可以在我的my-file.ts
输入它my-file.ts
!
import { APPS } from 'some-module';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.