为许多导入模式和Intellisense编写打字稿

SmujMaiku

我正在尝试将一些javascript模块更新为打字稿,并且无法保持兼容性。我有一些使用commonjs模式的javascript旧项目,const fn = require('mod');它们仍然依赖于此模块。我已经尝试按照打字稿指南处理多种类型的进口商品:

https://www.typescriptlang.org/docs/handbook/declaration-files/templates/module-d-ts.html#handling-many-using-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 };
}

但是,import fn from './mod';在打字稿中使用时,包括模块自己的单元测试,我得到File '.../mod.ts' is not a module.ts(2306)了一个智能感知错误。我缺少将其定义为模块但仍确保兼容性的“技术”吗?

SmujMaiku

看来我可以使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章