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

如何在TypeScript中从数组创建对应的Type类型?

实现数组到TypeScript联合类型的转换

你可以通过TypeScript的const断言和类型查询来实现,无需重复编写字符串字面量,具体步骤如下:

1. 修改constants.ts,固定数组类型

在定义validFields时添加as const,让TypeScript将数组推断为只读的字面量元组,而非宽泛的string[]:

const validFields = ['ID_PRODUCT', 'PRICE'] as const;

// 基于validFields自动生成联合类型
type Columns = typeof validFields[number];

这里typeof validFields会获取元组的类型readonly ["ID_PRODUCT", "PRICE"],[number]索引访问会提取元组中所有元素的类型,最终生成'ID_PRODUCT' | 'PRICE'的联合类型。

2. modeling.ts中使用自动生成的类型

直接引用上面生成的Columns类型即可:

import { Columns } from './constants';

function getBy(query: { column: Columns, value: string | number }) {
  // 函数实现
}

注:你示例中consumer.ts传入的value是数字123,这里将value类型调整为string | number更贴合实际场景,可根据需求自行修改。

3. consumer.ts中的类型校验

此时调用getBy时,column参数会自动校验是否属于validFields中的值,传入非法值会触发TypeScript报错:

import { getBy } from './modeling';

// 合法:符合validFields中的值
const product = getBy({ column: 'ID_PRODUCT', value: 123 });

// 非法:TypeScript会报错,因为'INVALID_FIELD'不在validFields中
// const invalidProduct = getBy({ column: 'INVALID_FIELD', value: 'abc' });

这种方式既保证了数组和类型的一致性,又避免了重复编写代码,完全通过TypeScript类型系统实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:53:11