You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript动态使用Parameters获取Electron Dialog参数时报错求助

问题分析与解决方案

错误原因

你遇到的两个错误本质是同一个问题:Electron.Dialog类型里并非所有属性都是函数,而你定义的U是keyof Electron.Dialog(即Dialog的所有键),当U指向Dialog里的非函数成员时,Parameters<Electron.Dialog[U]>就会失效——因为Parameters工具类型只能作用于函数类型。

手动指定'showOpenDialog'没问题,是因为这个键对应的确实是Dialog的函数方法。

修正方案

需要缩小U的范围,只允许它指向Dialog中值为函数的键,同时确保Parameters只作用于函数类型。下面提供两种可行写法:

写法一:内联条件类型过滤

declare global {
  interface Window {
    dialogOpen: <T, U extends keyof Electron.Dialog>(
      name: U,
      ...options: Electron.Dialog[U] extends (...args: infer P) => any ? P : never
    ) => Promise<T>;
  }
}

写法二:预先定义函数键类型

先提取Dialog中所有函数属性的键,再约束U的范围,逻辑更清晰:

// 提取Electron.Dialog中所有值为函数的键
type DialogFunctionKeys = {
  [K in keyof Electron.Dialog]: Electron.Dialog[K] extends (...args: any) => any ? K : never
}[keyof Electron.Dialog];

declare global {
  interface Window {
    dialogOpen: <T, U extends DialogFunctionKeys>(
      name: U,
      ...options: Parameters<Electron.Dialog[U]>
    ) => Promise<T>;
  }
}

内容的提问来源于stack exchange,提问作者Get Off My Lawn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:45:31