/// /// /// export interface UploadInit { /** uploadできるファイルの種類 */ accept: string; /** 複数個ファイルをuploadできるかどうか */ multiple?: boolean; } export function upload( init: Omit & { multiple?: false }, ): Promise; export function upload( init: Omit & { multiple: true }, ): Promise; export function upload(init: UploadInit): Promise { return new Promise((resolve, reject) => { const input = document.createElement("input"); input.type = "file"; input.accept = init.accept; input.multiple = init.multiple ?? false; input.addEventListener("change", () => { resolve( init.multiple === true ? (!input.files ? undefined : input.files.length === 0 ? undefined : input.files) : (input.files?.[0] ?? undefined), ); }); input.addEventListener("error", reject); input.click(); }); }