集中地声明 TypeScript 类型

最近我将一个老项目改造成 TypeScript 项目,项目中有一些模型类型,这写类型在多个文件中都会使用,比如对用户的增删改查逻辑会分散在多个文件中,他们都会使用 User 这个类型,如果我把对 User 类型的生命放在任何一个文件中都会导致文件之间的互相引用,如果创建一个文件专门用来保存这个类型,又会导致文件更多并且这个文件内容略显单薄。后来就想到将所有的模型类型存放到一个单独的文件中,可以命名为types.ts,并确保该文件在tsconfig.json中的includesfiles中,这样就可以文件中直接使用了。比如以下就是我的types.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
declare namespace GW {
export type Image = {
id: string;
url: string;
alt: string;
description: string;
};

export type User = {
id?: string;
name: string;
phone: string;
email: string;
username: string;
password: string;
};
}

在其他文件中直接使用,代码如下:

1
2
3
4
5
class PostAddStore{
show = (post: GW.Post) => {
// do something
}
}

为了让敏感信息在传输中更加安全,在我的项目还用到jsencrypt对密码字段进行加密,而jsencrypt是没有类型声明的。jsencrypt给我们提供一个全局构造函数JSEncrypt,通过它创建的对象包含2个函数属性,分别是setKeyencrypt,以及这两个函数的类型声明。根据这些信息我在types.ts文件中对它进行了声明,代码如下:

1
2
3
4
5
6
interface Window {
JSEncrypt: new () => {
setKey: (publicKey: string) => void;
encrypt: (content: string) => string;
};
}

看起来以上代码非常简单,也非常直观,由于这中做法并不多件,所以我在网上找了很就才找到这种方法。