跳转到主要内容
模块 7 · 第 2 课(共 2)课程中的14/14~15 min
模块课程(2/2)

声明和合并

TypeScript 中使用类型声明文件(带有 .d.ts 扩展名)来描述现有 JavaScript 代码的形状,而不实现任何实际逻辑。它们仅包含类型定义、接口和函数签名。

当使用用纯 JavaScript 编写的第三方库时,这些文件是必不可少的。


声明合并

声明合并是编译器将使用相同名称声明的两个或多个单独声明合并到单个定义中的行为。

最常见的情况是接口合并:

TS
interface User {
  name: string;
}

interface User {
  age: number;
}

// The resulting User interface has both name and age properties!
const student: User = {
  name: 'Alice',
  age: 23,
};

如果属性具有相同的名称,则它们必须是相同的类型,否则 TypeScript 将报告错误。


修改全局和外部模块

我们可以使用声明合并来扩展其他模块或全局范围中定义的接口。

例如,如果我们想向浏览器的全局 window 对象添加一个属性:

TS
declare global {
  interface Window {
    analyticsToken: string;
  }
}

通过使用 declare global,我们告诉 TypeScript 我们正在将新签名注入到现有的全局 Window 接口中。


自己尝试一下

练习 1:基本声明合并

锻炼#ts.m7.l2.e1
尝试:0加载中...

在 TypeScript 中,同一范围内具有相同名称的接口会自动合并。声明一个具有属性 name: string 的 User 接口,然后在第二个块中声明相同的 User 接口,添加属性 Age: number。最后,使用适当的值声明 User 类型的常量 user。

正在加载编辑器...
显示提示

声明接口 User 两次,插入相应的属性,然后将字段分配给用户对象。

3 次尝试后可用的解决方案

练习 2:扩展全局窗口接口

锻炼#ts.m7.l2.e2
尝试:0加载中...

想象一下,您想要扩展全局 Window 接口以添加一个名为 config 且类型为 Record<string, string> 的自定义属性。使用声明全局编写正确的声明,将新属性合并到全局 Window 接口中。

正在加载编辑器...
显示提示

使用声明全局{接口窗口{配置:记录&lt;字符串,字符串&gt;; } }。

3 次尝试后可用的解决方案