TypeScript中如何将参数Schema转为模板字面量类型交集映射?
API配置系统的TypeScript类型定义问题
我正在为API配置系统做方案实验,需要帮助定义配置对象的TypeScript类型。注:该API为资源/端点配置,每个资源/端点的指定路径必须包含特定参数,以下以TypeScript术语展开说明。
核心问题:配置对象的每个属性都有一个嵌套属性,必须包含特定子串。我定义了如下Schema对象,用于指定嵌套属性需包含的子串(每个子串需用大括号包裹,如{id}):
const pathsSchema = { foo: { params: ["id"], // 对应子串为`{id}` }, } as const;
(我从该对象生成类型,若有需要,可直接使用类型而非对象)
对应的配置对象示例如下:
const config = { foo: { path: "foo?id={id}", }, };
单个子串的场景很简单,可通过以下类型定义实现:
type Path<Param extends string> = `${string}{${Param}}${string}`; type Paths<Schema = typeof pathsSchema> = { [Name in keyof Schema]: { path: Path<Schema[Name]["params"][0]>; }; };
原本多子串场景需生成所有排列组合,这并不合理,但后续发现模板字面量类型可相交(感谢Alex Wayne的提示)。因此我的核心问题变为:如何将这种“名称-字符串数组”映射的Schema,转换为“名称-模板字面量类型交集”的映射?
内容的提问来源于stack exchange,提问作者Darryl Noakes
相关产品推荐
相关产品推荐

