Собственные встроенные объявления 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
легко отделить существующий тип класса, а затем вы можете внести в этот тип изменения?