Интерфейс Typescript, функция и пространство имен имеют одинаковое имя. Который экспортируется?

В исследуемом файле определения Typescript (DefiniteTyped) есть интерфейс, функция и пространство имен с одинаковым именем: 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;

Ну, какой это экспорт? Интерфейс? Функция? пространство имен? Как это имеет смысл? Как вы можете назвать несколько вещей точно так же, как в одном и том же объеме / пространстве имен??

4 ответа

Развернуть ответ @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;

Итак, чтобы ответить на ваш вопрос, вы можете экспортировать один тип, как в приведенном выше примере, остальная часть объявления объединяется между ними.

Официальный документ машинописного текста называет это « слиянием объявлений ».

По сути, он определяет что-то, что одновременно отличается от вышеперечисленного. Я добавляю новый ответ, чтобы дать вам ссылку на игровую площадку, и я надеюсь, что это поможет вам.

Они только что создали вещь "бегун-беги-спортивная сумка". Это нормально, это не твой код. В основном они экспортируют вещь, которая является всем вышеперечисленным. Точно так же, как вы могли бы сделать это в JavaScript:

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

посмотрите на этот код для детской площадки

Другие вопросы по тегам