在 TypeScript 中,declare
关键字用于告诉 TypeScript 编译器:"某个变量、类型、模块等已经存在了",即使它可能在当前文件中没有定义。这通常用于描述 JavaScript 库的类型信息,或者是在 TypeScript 中引用已经存在的全局变量而不实际导入它们。
使用 declare
的几种情况包括:
1. 声明变量
如果你在 TypeScript 文件中使用了在其他地方定义的全局变量,你可以使用 declare
关键字来声明这个变量的类型。
typescript
declare var myGlobalVar: string;
这告诉 TypeScript myGlobalVar
是一个全局变量,并且它的类型是 string
。
2. 声明类型
declare
也可以用来声明全局的类型,这通常在 .d.ts
文件中进行,这些文件用于定义和存储类型信息。
typescript
// 在 .d.ts 文件中
declare type MyGlobalType = {
name: string;
age: number;
};
3. 声明模块
当使用非 TypeScript 编写的模块时,你可以使用 declare module
告诉 TypeScript 这个模块的存在,并描述它的类型。
typescript
declare module 'some-external-module' {
export function doSomething(): void;
}
4. 声明类和接口
declare
也可以用来声明类和接口,这在描述已有的 JavaScript 类型时非常有用。
typescript
declare class MyClass {
myMethod(arg: string): number;
}
declare interface MyInterface {
myProperty: string;
}
5. 声明命名空间
你可以使用 declare namespace
来声明全局的命名空间,它可以包含类型、接口等。
typescript
declare namespace MyNamespace {
export interface SomeInterface {
doSomething(): void;
}
}
这样,你就可以使用 MyNamespace.SomeInterface
来引用这个接口。
6. 声明文件
当你创建 .d.ts
文件时,你会使用 declare
关键字来告诉 TypeScript 这个文件只包含类型声明而不包含具体的实现。
typescript
// some-declarations.d.ts
declare module 'another-module' {
export function anotherFunction(): void;
}
使用 declare
是 TypeScript 类型系统的一个重要部分,它允许你在不提供具体实现的情况下,安全地使用 JavaScript 的动态特性。这为 TypeScript 提供了灵活性,同时保持了类型安全。