TypeScript - 为自定义 class 名称使用预定义名称

TypeScript - Using predefined names for custom class names

我们可以使用 TypeScript 中的预定义名称来命名自定义 classes/interfaces 吗? 如果自定义 class 名称与 TypeScript 中的预定义名称冲突,是否存在可能导致错误的用例?

例如 - 我可以创建一个名为 RequestInfo 的自定义 class 而 TypeScript 已经有一个 RequestInfo 类型 -> type RequestInfo = Request | string;?

您不能将 TypeScript 中的任何预定义名称用作自定义名称 class/interface/type。原因是 class 声明创建了 constructor function as well as a type definition。这意味着我可以做这样的事情:

class Hero {}
const myHero: Hero = new Hero();
const somethingElse: Hero & string = '';

因此,当您尝试重新定义预定义类型时,TypeScript 编译器会发出错误,因为通常会为 class.

生成类型

但是,如果您希望在模块中有多个接口声明,TypeScript 将使用 declaration merging 将两个接口合并为一个的概念。

interface Hero { x!: number; }
interface Hero { y!: number; }