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

TypeScript中如何基于字符串数组生成object type或interface

实现方案

方案1:从预期键名数组直接生成(最简实现)

首先给数组添加as const断言保留字面量类型,再结合TS内置的Record工具类型即可实现:

// 必须加as const,避免类型被收窄为普通string数组
const expectedKeys = ['timestamp', 'price'] as const;

// 一行生成目标类型
type ExpectedType = Record<typeof expectedKeys[number], string>;

生成的ExpectedType完全符合需求,等效结构如下:

type ExpectedType = {
  timestamp: string;
  price: string;
}

注意:如果省略as const断言,TS会把expectedKeys推导为string[]类型,最终生成的类型会变成通用索引签名{ [key: string]: string },丢失精确的键名约束。


方案2:从结构对象反向生成(适合需要运行时校验的场景)

如果你需要在运行时过滤接口返回的多余字段,也可以从结构对象出发,同时得到类型和运行时可用的键数组,避免两端重复维护:

const objectWithExpectedShape = {
  timestamp: '',
  price: '',
};

// 生成类型
type ExpectedType = typeof objectWithExpectedShape;
// 反向提取运行时可用的键数组
const expectedKeys = Object.keys(objectWithExpectedShape) as Array<keyof ExpectedType>;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:57:00