如何在TypeScript定义文件(.d.ts)中声明带有errors数组属性的函数类型
给带属性的函数编写TypeScript类型定义
我来帮你搞定这个问题~你遇到的情况是函数本身有调用签名,同时还挂载了额外的属性,普通的函数声明确实没法直接定义这种结构,下面给你两种正确的实现方式:
方法1:用接口定义“函数+属性”的复合类型
这种方式最直观,直接用接口同时描述函数的调用行为和它的属性:
// example.d.ts // 先定义一个接口,同时包含函数签名和属性 export interface ExampleFunction { // 函数调用签名:接收any类型的data,返回boolean (data: any): boolean; // 挂载的errors属性:字符串数组类型 errors: string[]; } // 导出这个类型的变量,对应你js里的myFunc export declare const example: ExampleFunction;
这样定义后,TypeScript就能识别:
- 你可以像普通函数一样调用
example(someData),返回值会被推断为boolean - 你也可以直接访问
example.errors,它的类型会被检查为string[]
方法2:用函数+命名空间的合并声明
TypeScript支持同名的函数和命名空间进行合并,也能实现同样的效果:
// example.d.ts // 先声明函数的调用签名 export declare function example(data: any): boolean; // 再声明同名的命名空间,用来定义函数的属性 export declare namespace example { export let errors: string[]; }
这种写法和第一种效果完全一致,适合需要给函数添加多个零散属性的场景。
纠正你的错误写法
你之前尝试的export declare property uploadedFile.errors: Array<string>;是不符合TypeScript语法的,TypeScript不支持直接这样声明函数的属性,必须用上面两种方式之一来实现。
内容的提问来源于stack exchange,提问作者myol
相关产品推荐
相关产品推荐

