我正在尝试将一些javascript模块更新为打字稿,并且无法保持兼容性。我有一些使用commonjs模式的javascript旧项目,const fn = require('mod');
它们仍然依赖于此模块。我已经尝试按照打字稿指南处理多种类型的进口商品:
// 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 };
}
但是,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模式正确构建,并且我的打字稿单元测试不会引发智能感知错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句