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

如何将常量指定为另一个类型中某个键的类型?

如何将常量指定为另一个类型中某个键的类型?

这个问题我之前也碰到过,TypeScript的类型检查就是这么严谨——虽然你清楚clickedItem肯定是datasetResponse的合法键,但它没明确接收到这个信息,所以才会抛出错误。下面给你两个关键的解决步骤,亲测有效:

  • 第一步:给clickedItem加上精确的类型约束
    在你的DatasetChildrenFilterItemsProps类型定义里,把clickedItem的类型指定为keyof datasetResponse。这个keyof操作符会自动提取datasetResponse的所有键作为联合类型,也就是"address_1" | "address_2" | "city",这样TypeScript就明确知道clickedItem只能是这三个值之一了。

  • 第二步:用括号语法访问对象属性
    你之前用的data.clickedFilterItem是点语法,这种语法只适用于固定的属性名字面量,而clickedFilterItem是变量,所以得改成括号语法data[clickedFilterItem]。这样TypeScript就能正确关联到你要访问的属性了。

给你贴个修改后的完整代码示例,看着更清楚:

首先修正Props的类型定义:

// 先明确你的Props类型
type DatasetChildrenFilterItemsProps = {
  data: /* 这里填入你原本的data类型 */;
  clickedItem: keyof datasetResponse; // 核心类型约束
};

export type datasetResponse = {
  address_1?: string;
  address_2?: string;
  city?: string;
};

然后修正组件内的代码:

import { useState } from 'react';

export default function DatasetFilterItems({
  data,
  clickedItem,
}: DatasetChildrenFilterItemsProps) {
  const [open, setOpen] = useState(false);
  const clickedFilterItem = clickedItem;
  // 注意这里用括号语法,同时确保peopleData的类型是datasetResponse[]
  const filteredList = peopleData.map((item) => item[clickedFilterItem]); 
}

另外补充一句:如果你的peopleData还没明确类型为datasetResponse[],最好也加上这个定义,这样整个类型检查会更严谨,避免其他潜在的类型错误。

备注:内容来源于stack exchange,提问作者user19701195

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 08:52:58