标签导航:

typescript同级文件夹类型提示:如何正确编写index.d.ts文件?

TypeScript类型声明与模块导入:有效解决同级文件夹类型提示难题

在日常开发中,我们经常将工具函数或模块整理成独立文件夹,例如test文件夹。为了在其他项目中复用这些模块并获得准确的类型提示,需要在对应的index.d.ts文件中声明其类型。然而,简单的类型声明并不能保证在所有项目中都能获得正确的提示,这常常令人困惑。本文将详细讲解如何在index.d.ts文件中正确声明同级文件夹下的JavaScript模块类型,从而在其他项目中获得完整的代码提示。

问题:如何在main.js(或main.ts)中引入test/index.js中的函数或变量时,获得准确的类型提示,而不是简单的import fnc信息? 假设index.js已经导出了test文件夹下所有函数和变量。

解决方案的关键在于index.d.ts文件中的类型声明必须与index.js中的实际导出内容完全一致。 以下是一个示例:

假设test/index.js包含以下代码:

export function add(a, n = 1) {
    return a + n;
}

那么,对应的test/index.d.ts文件应该这样编写:

export function add(a: number, n?: number): number;

这个声明精确地定义了add函数的参数类型和返回值类型。 在main.ts文件中,我们可以正常使用add函数并获得类型提示:

import { add } from './test';

// (a: number, n?: number | undefined) => number
type T = typeof add;

通过这种精确的类型声明,main.ts中对add函数的使用将获得完整的类型检查和代码提示,鼠标悬停在add函数上即可查看其类型定义。 这确保了在使用test文件夹中的模块时,充分利用TypeScript带来的类型安全性和代码可读性提升。