javascript Typescript:从js文件导出变量只是为了使用类型

tvz2xvvm  于 2023-11-15  发布在  Java
关注(0)|答案(1)|浏览(111)

我有一个JavaScript项目,在那里我使用typescript作为助手,不打算在短期内将整个项目转换为typescript。
index文件中,定义了一些变量,比如varAvarB,这些变量在索引文件中填充,但在调用其他文件中的函数时作为参数传递。我想为其他文件中定义的这些函数添加类型。所有这些函数都有相同的接口。要做到这一点,我正在创建一个类型声明文件,在这里我将定义公共接口,并在每个单独的函数文件中使用它作为JSDoc。我不想在声明文件中手动定义varAvarB的类型,但是想要使用index.js中自动推断的类型。要做到这一点,我可以看到这种工作的一种方法是,如果我显式导出这些变量并将其导入声明文件中。这似乎不好,因为我只是导出类型的变量,它们实际上并没有直接在任何其他文件中使用。有没有更好的替代方法来做到这一点?

//index.js

const varA = getConfigVar(..., 'a');
const varB = getConfigVar(..., 'b');

//... do something
if(something) {
  funA(a, b);
} else {
  funB(a, b);
}

//?? just exporting for types
module.exports = {
  varA,
  varB,
}
// funA
/** @type {Func} **/
function funA(a, b) {
...
}
// funB
/** @type {Func} **/
function funB(a, b) {
...
}
//types.d.ts
interface Func {
    (a: typeof import('./index').a, b: typeof import('./index').b)): void
}
im9ewurl

im9ewurl1#

在自己的文件中定义类型,即使它只是一个a.d.ts文件,

import {a} from './index.js';

export type A = typeof a;

字符串
然后,您的类型脚本代码可以使用这个A类型,它是 * 当前 * 隐式定义的,但是如果/当您在一个地方准备好时,您可以更改它。

相关问题