在 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;
出口的是哪一个;接口、函数还是命名空间?
这有什么意义?
如何在同一范围/命名空间中以完全相同的名称命名多个事物?
展开@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;
因此,为了回答您的问题,您可以导出单一类型,如上面的示例所示,声明的其余部分将在它们之间合并
基本上,它定义了同时脱离上述所有内容的东西。我添加了一个新答案,为您提供tsplayground的链接,希望对您有所帮助。
官方打字稿文档称之为“声明合并”。
他们刚刚创造了一款跑步者跑步运动包 thingamagig。没关系,这不是你的代码。基本上他们出口的东西就是以上所有的东西。就像你可以在 javascript 中执行此操作一样:
function foo() {};
foo.bar = function() {};
看看这个ts游乐场代码