如何用TypeScript定义可选且值非Undefined的映射类型
如何用TypeScript实现指定的LanguageToWasmMap类型
要满足你的需求,可以通过TypeScript的工具类型组合来定义LanguageToWasmMap:
type LanguageName = "javascript" | "typescript" | "java" | "csharp"; // 定义目标类型:所有键为可选,但值不能是undefined type LanguageToWasmMap = Partial<Record<LanguageName, string>>;
需求验证
- 仅赋值部分属性合法:
// 此代码完全合法,符合要求 const languageNameToWasmNameMap: LanguageToWasmMap = { "javascript": "typescript" };
- 赋值undefined报错:
// 此代码会触发TypeScript错误(提示`undefined`不能赋值给`string`类型),符合要求 const languageNameToWasmNameMapWithUndefined: LanguageToWasmMap = { "javascript": undefined };
进一步优化方案
如果需要确保特定属性在运行时存在,可以基于上述可选类型,添加运行时检查逻辑,同时利用TypeScript的类型断言来细化类型:
// 运行时验证函数,确保关键属性存在 function validateLanguageMap(map: LanguageToWasmMap): asserts map is Required<Pick<LanguageToWasmMap, "javascript" | "typescript">> { if (!map.javascript || !map.typescript) { throw new Error("映射表必须包含javascript和typescript的对应关系"); } } // 使用示例 const myMap: LanguageToWasmMap = { "javascript": "typescript", "typescript": "typescript" }; validateLanguageMap(myMap); // 此时TypeScript会自动推断myMap包含javascript和typescript的必填属性
内容的提问来源于stack exchange,提问作者Ramesh
相关产品推荐
相关产品推荐

