为许多导入模式和 Intellisense 编写 Typescript
Writing Typescript for Many Import Patterns and Intellisense
我正在尝试将某些 javascript 模块更新为打字稿,但无法保持兼容性。我在 javascript 中有一些使用 commonjs 模式 const fn = require('mod');
的旧项目仍然依赖于此模块。我已经尝试按照 typescript 指南处理如此多的导入:
// 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 模式正确构建,而且我的打字稿单元测试不会抛出智能感知错误。
我正在尝试将某些 javascript 模块更新为打字稿,但无法保持兼容性。我在 javascript 中有一些使用 commonjs 模式 const fn = require('mod');
的旧项目仍然依赖于此模块。我已经尝试按照 typescript 指南处理如此多的导入:
// 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 模式正确构建,而且我的打字稿单元测试不会抛出智能感知错误。