TypeScript中如何创建无重复的动态排列类型?
如何在TypeScript中排除动态字符串类型的自身重复组合
要排除USDxUSD这类自身重复的组合,你可以利用TypeScript的分布条件类型或映射类型,结合Exclude工具类型来实现:
解法一:分布条件类型实现
type Currency = 'CAD' | 'USD' | 'EUR'; type CurrencyQuote<T extends Currency = Currency> = T extends infer U ? `${U}x${Exclude<Currency, U>}` : never;
解法二:映射类型实现(更直观)
type Currency = 'CAD' | 'USD' | 'EUR'; type CurrencyQuote = { [K in Currency]: `${K}x${Exclude<Currency, K>}` }[Currency];
工作原理
两种写法的核心逻辑一致:
- 遍历
Currency联合类型中的每一个成员 - 用
Exclude<Currency, 当前成员>过滤掉自身,得到剩余的货币类型联合 - 通过模板字面量将当前成员与剩余成员组合,最终合并成所有非自身组合的联合类型
最终生成的CurrencyQuote类型为:"CADxUSD" | "CADxEUR" | "USDxCAD" | "USDxEUR" | "EURxCAD" | "EURxUSD",完全排除了自身重复的组合项。
内容的提问来源于stack exchange,提问作者Gustavo Moura
相关产品推荐
相关产品推荐

