要在 TypeScript 中声明全局类型:

  1. 创建一个 global.d.ts 文件并在全局命名空间中声明类型。
  2. 添加需要全局访问的类型或接口。
  3. 使用 export {} 使文件成为模块。

在项目的 src 目录中,创建一个包含以下 global.d.ts 文件的 types 目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
export {};

declare global {
/**
* 现在声明进入全局命名空间的类型,或者增加全局命名空间中的现有声明。
*/
interface Employee {
id: number;
name: string;
salary: number;
}

type Person = {
name: string;
age: number;
};
}

上面的例子展示了如何创建一个修改全局命名空间的模块。 我们创建了一个全局可访问的 Employee 和 Person 类型。

现在我可以访问我项目中的类型,而无需导入它们。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const emp: Employee = {
id: 1,
name: 'James',
salary: 100,
};

console.log(emp);

const person: Person = {
name: 'Tom',
age: 30,
};

console.log(person);

如果我们在 IDE 中遇到错误,请尝试将类型目录的路径添加到 tsconfig.json 文件中。

1
2
3
4
5
{
"compilerOptions": {
"typeRoots": ["./types", "./node_modules/@types"]
}
}

我们在 global.d.ts 文件中使用 export {} 行将其标记为外部模块。 模块是包含至少 1 个导入或导出语句的文件。 我们必须这样做才能扩大全局范围。