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

如何在*.d.ts文件中声明包含两种不同类型的Iterable?

问题

我有如下JavaScript函数,希望让VSCode对其返回对象显示自动补全提示,但未能成功:

const profile = (form, validation) =>
  Object.defineProperties(
    { form, validation },
    {
      0: { value: form },
      1: { value: validation },
      length: { value: 2 },
      [Symbol.iterator]: { value: Array.prototype[Symbol.iterator] },
      [Symbol.toStringTag]: { value: 'ValidationProfile' },
    },
  );

我尝试为返回对象编写了如下*.d.ts类型定义,但显然存在错误:

import { Validation } from './validation';

export type ValidationProfile = typeof ValidationProfileAPI;

// !!! 返回的不是数组,只是想试着让它能生效
const ValidationProfileAPI: [HTMLFormElement, Validation];

declare namespace ValidationProfileAPI {
    let form: HTMLFormElement;
    let validation: Validation;
    interface iterator implements Iterable<HTMLFormElement|Validation> {}
}

我找到过一个类似问题,但不知道怎么适配到我的场景,恳请提供建议。


可行解决方案(更新)

以下是最终可用的实现方案,基于支持数组解构的TypeScript接口方案:

import { Validation } from './validation';

export interface ValidationProfile extends Iterable<HTMLFormElement | Validation> {
    form: HTMLFormElement;
    validation: Validation;
    [0]: HTMLFormElement;
    [1]: Validation;
}

内容的提问来源于stack exchange,提问作者Alexandr Kalabin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:35:59