Перейти к содержимому

Генератор объявлений TypeScript — Numio

Генерирует файл объявлений .d.ts из исходного кода TypeScript, как это делает tsc --declaration --emitDeclarationOnly. Тела функций и инициализаторы удаляются, а у приватных членов класса остаётся только имя.

Вы хотите заранее увидеть публичную поверхность типов, которую опубликует файл библиотеки, до сборки пакета.

TypeScript

TypeScript

Когда пригодится

  • Вы хотите заранее увидеть публичную поверхность типов, которую опубликует файл библиотеки, до сборки пакета.
  • Нужен поддерживаемый вручную .d.ts для одного модуля или ввод только с объявлениями для инструмента TypeScript to Flow.

Как пользоваться

  1. Вставьте модуль TypeScript в панель TypeScript.
  2. Код отправляется на /api/flow-to-typescript с установленными isTS и declarationOnly, и компилятор TypeScript генерирует объявления на сервере.
  3. Скопируйте объявления в файл .d.ts. Страница форматирует их через Prettier, поэтому в них отступ в два пробела и нет точек с запятой.

TypeScript

export interface CartItem { sku: string; price: number; qty: number }
export const TAX_RATE = 0.08;

export function subtotal(items: CartItem[]) {
  return items.reduce((sum, i) => sum + i.price * i.qty, 0);
}

export class Cart {
  private items: CartItem[] = [];
  constructor(public readonly currency = "USD") {}
  add(item: CartItem) {
    this.items.push(item);
    return this;
  }
}

Объявления TypeScript (.d.ts)

export interface CartItem {
  sku: string
  price: number
  qty: number
}
export declare const TAX_RATE = 0.08
export declare function subtotal(items: CartItem[]): number
export declare class Cart {
  readonly currency: string
  private items
  constructor(currency?: string)
  add(item: CartItem): this
}

Подробности и ограничения

Страница отправляет ваши данные на серверный маршрут (/api/flow-to-typescript) для конвертации; они обрабатываются не только в браузере. API-маршруты Next.js по умолчанию принимают тело запроса размером до 1 МБ.

Компилятор загружает библиотечные файлы ES2020 и DOM из TypeScript, поэтому Promise, Date, Map и типы возврата, выведенные из встроенных методов (number для subtotal в примере), записываются корректно.

Синтаксические ошибки останавливают конвертацию, и вместо результата показывается сообщение компилятора, например TS1134 "Variable declaration expected".

Каждый ввод компилируется как один файл; импорты из других модулей не разрешаются.

FAQ

Поддерживаются ли async-функции?

Да. Выведенный тип возврата оборачивается в Promise, так что async-функция, возвращающая Todo[], объявляется как export declare function loadTodos(url: string): Promise<Todo[]>.

Что происходит с приватными членами?

Они сохраняются только по имени, например "private items;", так что форма класса совпадает, а тип не раскрывается.

Сохраняются ли значения параметров по умолчанию?

Нет. Параметр со значением по умолчанию становится необязательным, так что constructor(public readonly currency = "USD") превращается в constructor(currency?: string).

Спецификации и справка