Générer des déclarations TypeScript — Numio
Émet un fichier de déclarations .d.ts à partir de code TypeScript, comme tsc --declaration --emitDeclarationOnly. Les corps de fonction et les initialiseurs sont supprimés, et les membres private des classes ne gardent que leur nom.
Vous voulez prévisualiser la surface de types publique qu’un fichier de bibliothèque publiera avant de builder le paquet.
TypeScript
TypeScript
Quand l’utiliser
- Vous voulez prévisualiser la surface de types publique qu’un fichier de bibliothèque publiera avant de builder le paquet.
- Vous avez besoin d’un .d.ts maintenu à la main pour un seul module, ou d’une entrée ne contenant que des déclarations pour l’outil TypeScript to Flow.
Mode d’emploi
- Collez un module TypeScript dans le panneau TypeScript.
- Le code est envoyé à /api/flow-to-typescript avec isTS et declarationOnly activés, et le compilateur TypeScript émet les déclarations sur le serveur.
- Copiez les déclarations dans un fichier .d.ts. La page les formate avec Prettier : indentation de deux espaces et pas de points-virgules.
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;
}
}Déclarations 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
}Détails et limites
La page envoie votre saisie à une route serveur (/api/flow-to-typescript) pour la conversion ; elle n’est pas traitée uniquement dans le navigateur. Par défaut, les routes API de Next.js acceptent des corps de requête jusqu’à 1 Mo.
Le compilateur charge les fichiers de bibliothèque ES2020 et DOM de TypeScript, si bien que Promise, Date, Map et les types de retour inférés depuis des méthodes natives (number pour subtotal dans l’exemple) sont écrits correctement.
Les erreurs de syntaxe interrompent la conversion, et le message du compilateur, par exemple TS1134 "Variable declaration expected", s’affiche à la place de la sortie.
Chaque entrée est compilée comme un seul fichier ; les imports d’autres modules ne sont pas résolus.
FAQ
Les fonctions async sont-elles prises en charge ?
Oui. Le type de retour inféré est enveloppé dans Promise, donc une fonction async qui renvoie Todo[] est déclarée comme export declare function loadTodos(url: string): Promise<Todo[]>.
Que deviennent les membres private ?
Ils ne sont conservés que par leur nom, par exemple "private items;", si bien que la forme de la classe correspond toujours sans exposer le type.
Les valeurs par défaut des paramètres sont-elles conservées ?
Non. Un paramètre avec une valeur par défaut devient optionnel : constructor(public readonly currency = "USD") devient constructor(currency?: string).