Skip to content
Shimon's BlogShimon's Blog
主页
杂谈
  • 主页
      • 代码笔记
          • 代码学习教程
              • TypeScript 教程
                  • 进阶
                    • 元组
                      • 声明合并
                        • 函数的合并
                          • 接口的合并
                            • 类的合并
                              • 参考
                              • 字符串字面量类型
                                • 扩展阅读
                                  • 枚举
                                    • 泛型
                                      • 类
                                        • 类与接口
                                          • 类型别名
                                        • 如何学习一门计算机语言

                                      声明合并

                                      Shimon Zhan2022年4月19日
                                      • TypeScript
                                      大约 1 分钟

                                      此页内容
                                      • 函数的合并
                                      • 接口的合并
                                      • 类的合并
                                      • 参考

                                      如果定义了两个相同名字的函数、接口或类,那么它们会合并成一个类型:

                                      # 函数的合并

                                      之前学习过,我们可以使用重载定义多个函数类型:

                                      function reverse(x: number): number;
                                      function reverse(x: string): string;
                                      function reverse(x: number | string): number | string {
                                        if (typeof x === "number") {
                                          return Number(x.toString().split("").reverse().join(""));
                                        } else if (typeof x === "string") {
                                          return x.split("").reverse().join("");
                                        }
                                      }
                                      

                                      # 接口的合并

                                      接口中的属性在合并时会简单的合并到一个接口中:

                                      interface Alarm {
                                        price: number;
                                      }
                                      interface Alarm {
                                        weight: number;
                                      }
                                      

                                      相当于:

                                      interface Alarm {
                                        price: number;
                                        weight: number;
                                      }
                                      

                                      注意,合并的属性的类型必须是唯一的:

                                      interface Alarm {
                                        price: number;
                                      }
                                      interface Alarm {
                                        price: number; // 虽然重复了,但是类型都是 `number`,所以不会报错
                                        weight: number;
                                      }
                                      
                                      interface Alarm {
                                        price: number;
                                      }
                                      interface Alarm {
                                        price: string; // 类型不一致,会报错
                                        weight: number;
                                      }
                                      
                                      // index.ts(5,3): error TS2403: Subsequent variable declarations must have the same type.  Variable 'price' must be of type 'number', but here has type 'string'.
                                      

                                      接口中方法的合并,与函数的合并一样:

                                      interface Alarm {
                                        price: number;
                                        alert(s: string): string;
                                      }
                                      interface Alarm {
                                        weight: number;
                                        alert(s: string, n: number): string;
                                      }
                                      

                                      相当于:

                                      interface Alarm {
                                        price: number;
                                        weight: number;
                                        alert(s: string): string;
                                        alert(s: string, n: number): string;
                                      }
                                      

                                      # 类的合并

                                      类的合并与接口的合并规则一致。

                                      # 参考

                                      • Declaration Mergingopen in new window(中文版open in new window)
                                      上次编辑于: 2022/4/19 07:13:07
                                      贡献者: ShimonZhan
                                      上一页
                                      元组
                                      下一页
                                      字符串字面量类型
                                      Copyright © 2021-present Shimon Zhan