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

如何基于现有字符串数组声明TS类型以指定属性名?

基于字符串数组创建TypeScript类型并初始化对象

要实现基于现有字符串数组生成对应属性名的类型,核心是让TypeScript保留数组元素的具体字面量值,而非将其视为宽泛的string[]类型。具体实现步骤如下:

1. 锁定数组元素的字面量类型

使用as const断言定义数组,让TypeScript记住每个元素的具体值:

const propertiesForType = [
    "myProperty1",
    "myProperty2"
] as const;

此时propertiesForType的类型为readonly ["myProperty1", "myProperty2"],而非普通的string[]。

2. 提取属性名联合类型

从数组类型中提取所有元素的类型,得到属性名的联合类型:

type PropertyNames = typeof propertiesForType[number];
// 类型结果:"myProperty1" | "myProperty2"

3. 创建映射类型

基于联合类型生成包含指定属性的对象类型:

type myTypeFromArray = {
    [K in PropertyNames]: any; // 每个属性对应any类型,可按需替换为具体类型
};

如果需要属性为可选,可添加?修饰符:

type myTypeFromArrayOptional = {
    [K in PropertyNames]?: any;
};

4. 初始化符合类型的对象

非可选类型下,TypeScript会强制要求对象包含所有指定属性:

let myMappedObject: myTypeFromArray = {
    myProperty1: "hello",
    myProperty2: 456
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:55:03