Typescript 接口、函数和命名空间都具有相同的名称。哪个正在导出?

问题描述 投票:0回答:4

在 Typescript 定义文件(DefinitelyTyped)中我正在检查,有一个接口、一个函数和一个命名空间,它们都具有完全相同的名称:

twilio

这是文件前几行的示例:

declare interface twilio {
  (sid?: string, tkn?: string, options?: twilio.ClientOptions): twilio.RestClient
}

declare function twilio(sid?: string, tkn?: string, options?: twilio.ClientOptions): twilio.RestClient;

declare namespace twilio {
 ....

然后一直在文件底部显示

export = twilio;

出口的是哪一个;接口、函数还是命名空间?

这有什么意义?

如何在同一范围/命名空间中以完全相同的名称命名多个事物?

typescript module definitelytyped typescript-definitions .d.ts
4个回答
1
投票

展开@ppp 答案

声明合并是指 TypeScript 编译器将两个或多个类型合并为一个声明,前提是它们具有相同的名称。

要记住的重要一点是:类与类不能合并。

因此,仅作为示例,允许合并:

interface User {
  name: string;
}

interface User {
  age: number;
}

interface User {
  height: number;
}

class Person implements User {
  name = "John"
  age = 30;
  height = 180
}

enum User {...}

namespace User {...}

const person = new Person();
console.log(person) // {name: "John", age: 30, height: 180}

export person;

因此,为了回答您的问题,您可以导出单一类型,如上面的示例所示,声明的其余部分将在它们之间合并


0
投票

基本上,它定义了同时脱离上述所有内容的东西。我添加了一个新答案,为您提供tsplayground的链接,希望对您有所帮助。


0
投票

官方打字稿文档称之为“声明合并”。


-2
投票

他们刚刚创造了一款跑步者跑步运动包 thingamagig。没关系,这不是你的代码。基本上他们出口的东西就是以上所有的东西。就像你可以在 javascript 中执行此操作一样:

function foo() {};
foo.bar = function() {};

看看这个ts游乐场代码

© www.soinside.com 2019 - 2024. All rights reserved.