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

如何确保对象成员值匹配TypeScript泛型类型

如何基于对象字段类型构造严格匹配的对象数组?

你需要让name和values的类型形成关联绑定,而非当前的松散联合类型。可以通过将Properties定义为泛型联合类型来实现:

type Values = {
    foo: boolean,
    bar: string
}

// 遍历Type的每个键,为每个键生成严格匹配的类型
type Properties<Type> = {
    [K in keyof Type]: {
        name: K;
        values: Type[K][];
    }
}[keyof Type];

const properties: Properties<Values>[] = [
    {
        name: 'foo',
        // TS会报错:类型“string”不能赋值给类型“boolean”
        values: [true, 'false'],
    },
    {
        name: 'bar',
        // 类型校验通过
        values: ['hello', 'goodbye'],
    }
];

原理说明

  • [K in keyof Type]遍历目标类型的每个键K,为每个键单独生成一个类型:name固定为当前键K,values的类型严格对应Type[K]的数组。
  • [keyof Type]将上述映射类型转换为联合类型,此时Properties<Values>等价于{name: 'foo', values: boolean[]} | {name: 'bar', values: string[]}。
  • TypeScript会根据每个对象中的name字段,自动推断出values应匹配的类型,精准检测类型不匹配的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:38:12