Генератор объявлений TypeScript — Numio
Генерирует файл объявлений .d.ts из исходного кода TypeScript, как это делает tsc --declaration --emitDeclarationOnly. Тела функций и инициализаторы удаляются, а у приватных членов класса остаётся только имя.
Вы хотите заранее увидеть публичную поверхность типов, которую опубликует файл библиотеки, до сборки пакета.
TypeScript
TypeScript
Когда пригодится
- Вы хотите заранее увидеть публичную поверхность типов, которую опубликует файл библиотеки, до сборки пакета.
- Нужен поддерживаемый вручную .d.ts для одного модуля или ввод только с объявлениями для инструмента TypeScript to Flow.
Как пользоваться
- Вставьте модуль TypeScript в панель TypeScript.
- Код отправляется на /api/flow-to-typescript с установленными isTS и declarationOnly, и компилятор TypeScript генерирует объявления на сервере.
- Скопируйте объявления в файл .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).