联盟类型 - 令人生畏的结果

Union Type - formidable results

我正在 Express 项目中使用 formidable 模块。

formidable 的输入文件包含以下内容:

export interface Files {
    [key: string]: File; // | File[];
}
export interface File {
    name: string;
    //...
}
export declare class IncomingForm extends events.EventEmitter {
    //..
    parse(req: http.IncomingMessage, 
     callback?: (err: any, fields: Fields, files: Files) => any): void;
}

注意 Files 的定义注释掉 // | File[]

我使用 parse 方法在浏览器上获取上传的文件。实际测试表明,当只上传一个文件时,回调中的 files 对象有一个 属性 with key files (非常混乱的名称使用)类型 File。在调试器中显示为:

Object (files: File)

如果上传两个文件,files.files类型为File[]

代码运行良好,没有任何错误。我很好奇为什么当定义省略了数组选项时它可以是单个对象或数组?

好像 formidable 的 DefinitelyTyped 定义已经过时了。

作为用户,这是您修复它并在此处提交拉取请求的好机会:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/formidable/index.d.ts