网站搜索

javascript - 在 Typescript 中导出一组函数


我刚接触 Typescript,我花了一段时间查找各种方法来做这件事,但我卡住了。

我想创建一个库文件,它只包含一组不相关的函数,我可以在任何地方导入。在普通的 Javascript 中,我可以像这样做:

let libraryFunctions = {};
libraryFunctions.a = () => {
  return true;
}
module.exports = libraryFunctions;

然而,在 Typescript 中,我只是收到一个抱怨,显示 Property 'a' does not exist on type {}。然后我看到我可以做类似这样的事情:

interface ILibraryFunctions {
  a(): boolean;
};

export class LibraryFunctions implements ILibraryFunctions {
  a = () => {
    return false;
  }
}

然而,创建一个类似乎有些过头(除非我对 TypeScript 的类理解有误)。有人能指引我正确的方向吗?

谢谢!

答案#1

在 TypeScript 中,你只需 export 任何你想要的东西,这与 ES2015 模块类似(也由 babel 实现):

export function a() {
  return true;
}

// or alternatively

export const b = () => false

然后,在另一个文件中

import {a, b} from './thatFirstFile';
// or
import * as libraryFunctions from './thatFirstFile';

至于你的具体情况,你不需要实现一个类:

interface ILibraryFunctions {
  a(): boolean;
};

const myLib: ILibraryFunctions = {
  a() { return true; }
};

export default myLib;

也就是说,正如丹尼尔在下面的评论中所说,答案开头提到的方法更可取:

从实际情况来看,你不会用 a 来 export default 一个对象,你会直接将 a 本身作为默认导出。也就是说,你不会按以前写的方法做的一个原因是,现有的工具可以更容易地对顶级导出进行 tree-shake,而不能对一个实际的对象进行。另外,使用第一种语法可以让你在有多个导出时使用 ES2015 的命名导入语法。