为许多导入模式和智能感知编写Typescript



我试图更新一些javascript模块到typescript和有问题保持兼容性。我有一些旧的项目在javascript使用commonjs模式const fn = require('mod');依赖于这个模块仍然。我试着按照typescript指南来处理这么多类型的导入:

https://www.typescriptlang.org/docs/handbook/declaration-files/templates/module-d-ts.html handling-many-consuming-import

// src/mod.ts
type FnResult = Promise<void>;
function fn(): FnResult {
return Promise.resolve();
}
fn.fn = fn;
fn.default = fn;
module.exports = fn;

这在编译旧的javascript项目和大多数新项目时都很有效。tsc构建以下内容:

// lib/mod.js
"use strict";
function fn() {
return Promise.resolve();
}
fn.fn = fn;
fn.default = fn;
module.exports = fn;
// lib/mod.d.ts
declare type FnResult = Promise<void>;
declare function fn(): FnResult;
declare namespace fn {
export var fn: typeof globalThis.fn;
var _a: typeof globalThis.fn;
export { _a as default };
}

然而,当在typescript中使用import fn from './mod';时,包括模块自己的单元测试,我得到File '.../mod.ts' is not a module.ts(2306)作为智能感知错误。这种"技术"还有别的用途吗?我错过了定义这作为一个模块,但仍然确保兼容性?

看起来我可以通过使用babel-plugin-replace-ts-export-assignment在babel配置中解决这个问题。添加我的.babelrc如下:

"plugins": [
"babel-plugin-replace-ts-export-assignment"
]

我的app.ts然后看起来像:

fn.fn = fn;
fn.default = fn;
export = fn;

它现在都正确构建javascript commonjs模式和我的typescript单元测试不会抛出智能感知错误。

最新更新