声明文件:生成TypeScript声明 — Numio
像 tsc --declaration --emitDeclarationOnly 一样,从 TypeScript 源码生成 .d.ts 声明文件。函数体和初始化表达式会被移除,类的 private 成员只保留名称。
在构建包之前,预览某个库文件将要发布的公开类型接口。
TypeScript
TypeScript
处理在浏览器本地完成,输入内容不会上传。输入可能在同一标签页的工具之间保留,共用设备用完后请清空。
适用场景
- 在构建包之前,预览某个库文件将要发布的公开类型接口。
- 你需要为单个模块手动维护一份 .d.ts,或为 TypeScript to Flow 工具准备只含声明的输入。
使用方法
- 将 TypeScript 模块粘贴到 TypeScript 面板。
- 代码会带着 isTS 和 declarationOnly 参数提交到 /api/flow-to-typescript,由 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)进行转换,并不只在浏览器中处理。Next.js API 路由默认接受最大 1 MB 的请求体。
编译器会加载 TypeScript 的 ES2020 和 DOM 库文件,因此 Promise、Date、Map 以及从内置方法推断出的返回类型(示例中 subtotal 为 number)都能正确写出。
语法错误会中止转换,并显示编译器消息(例如 TS1134 "Variable declaration expected")而不是输出。
每次输入都作为单个文件编译,不会解析从其他模块的导入。
FAQ
支持 async 函数吗?
支持。推断出的返回类型会包在 Promise 中,因此返回 Todo[] 的 async 函数会声明为 export declare function loadTodos(url: string): Promise<Todo[]>。
private 成员会怎样?
只保留名称,例如 "private items;",这样类的结构仍然一致,但不暴露其类型。
会保留参数默认值吗?
不会。带默认值的参数会变为可选参数,因此 constructor(public readonly currency = "USD") 会变为 constructor(currency?: string)。