类型'contextPaneTitleText'无法赋值给'keyof RemoteConfig'报错求助
解决TypeScript类型不兼容问题
问题原因
你当前使用的keyof RemoteConfig是Firebase SDK自带的RemoteConfig实例类型的键集合,对应的是RemoteConfig对象的内置属性(比如settings、defaultConfig等),而非你在远程配置后台自定义的键名。因此自定义键"contextPaneTitleText"不在这个类型范围内,触发类型不匹配错误。
解决方案
方案1:从默认配置推导自定义键类型(推荐)
这种方式能自动同步自定义键,无需手动维护类型:
- 在
../../firebase.ts中定义默认配置并导出键类型:
import { getRemoteConfig } from "firebase/remote-config"; // 初始化Firebase app... // 定义你的远程配置默认值 export const defaultRemoteConfig = { contextPaneTitleText: "默认标题", // 添加其他自定义配置键 }; export const remoteConfig = getRemoteConfig(app); remoteConfig.defaultConfig = defaultRemoteConfig; // 导出自定义配置键的类型 export type RemoteConfigKeys = keyof typeof defaultRemoteConfig;
- 修改
useFeature文件的类型引用:
import * as React from "react"; import { fetchAndActivate, getValue } from "firebase/remote-config"; import { remoteConfig, RemoteConfigKeys } from "../../firebase"; // 使用自定义的配置键类型 type FeatureName = RemoteConfigKeys; function useFeature(name: FeatureName) { async function fetchConfig() { await fetchAndActivate(remoteConfig); } React.useEffect(() => { void fetchConfig(); }, [name]); // 若需区分环境,可安全转换类型 // const flagName = ENV === "stage" ? `stage_${name}` : name; // return getValue(remoteConfig, flagName as string); return getValue(remoteConfig, name); } export { useFeature };
方案2:手动声明自定义键联合类型
如果不需要默认配置,直接手动指定允许的配置键:
// 在useFeature文件中替换原FeatureName定义 type FeatureName = "contextPaneTitleText" | "其他自定义键1" | "其他自定义键2";
这样调用useFeature时只能传入指定的键,类型检查会正常通过。
内容的提问来源于stack exchange,提问作者M Јǚйáĩď
相关产品推荐
相关产品推荐

