Плюсы / минусы объявления типов классов в .d.ts с использованием `class Foo` по сравнению с отдельными интерфейсами` Foo` и `FooConstructor` - PullRequest
0 голосов
/ 25 мая 2020

Собственные встроенные объявления TypeScript не используют ключевое слово class для определения классов. Вместо этого они определены как JavaScript перед class:

  • интерфейс для конструктора и методов c, например interface BigIntConstructor
  • другой интерфейс, например методы и свойства, например interface BigInt
  • a declare var для самого глобального встроенного объекта, например declare var BigInt: BigIntConstructor

Вот один пример: https://github.com/microsoft/TypeScript/blob/ba357e4a64aa61dbb8fab9f8a0844cd9353434e6/lib/lib.es2020.bigint.d.ts#L21 -L57

Я понимаю, что объявление трех типов более четко описывает, что на самом деле происходит на уровне JS, потому что классы в основном являются синтаксисом c сахаром поверх функций и объектов.

Помимо ясности, каковы плюсы и минусы любого подхода? Является ли один из них явно предпочтительным из-за преимуществ одного или проблем с другим?

Кроме того, наличие отдельных типов упрощает частичное повторное использование типов (например, изменение сигнатуры метода экземпляра, когда обезьяна исправляет другой библиотека)? Или это не проблема, потому что с помощью InstanceType легко отделить существующий тип класса, а затем вы можете внести в этот тип изменения?

...