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

如何利用TypeScript类型通过键取值并解决类型匹配错误?

问题解决与用法说明

一、当前类型错误的原因及修复

你定义的MHStatus是TypeScript类型别名,仅存在于编译阶段,运行时不存在对应的实体对象。直接通过MHStatus['AVAILABLE']访问会报错,因为类型不能作为值来使用。

正确的定义方式

需要同时定义运行时可用的常量对象和从对象派生的类型,确保类型与值同步:

// 定义运行时可访问的常量对象,as const 确保值的类型是字面量而非string
export const MHStatus = {
    AVAILABLE: "AVAILABLE",
    IN_PROGRESS: "IN_PROGRESS",
    UNAVAILABLE: "UNAVAILABLE"
} as const;

// 从常量对象派生类型,自动获取所有值的联合类型
export type MHStatus = typeof MHStatus[keyof typeof MHStatus];

修复后的业务代码

现在可以正常通过常量对象访问状态值,且类型会被正确推导:

const status = isTrue ? MHStatus.AVAILABLE : MHStatus.UNAVAILABLE;
const formatOnj = await formatobjTOAdd(getterSetter, id, status);

此时status的类型是"AVAILABLE" | "UNAVAILABLE",完全符合formatobjTOAdd函数的参数类型要求。

二、通过传递键获取对应值的类型安全方式

如果需要通过键名动态获取状态值,可以用泛型约束键的范围,同时让TypeScript自动推导返回值的类型:

// 泛型函数:约束键必须是MHStatus对象的键,返回对应值的字面量类型
function getStatusValue<K extends keyof typeof MHStatus>(key: K): typeof MHStatus[K] {
    return MHStatus[key];
}

// 使用示例
const available = getStatusValue('AVAILABLE'); // 类型为"AVAILABLE"
const unavailable = getStatusValue('UNAVAILABLE'); // 类型为"UNAVAILABLE"

这种方式既保证了运行时可以正确获取值,又在编译阶段提供了严格的类型检查,避免传入无效键名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:27:35