جاوااسکریپت - تعیین نوعهای مختلف مقدار در Map بسته به نوع کلید در تایپاسکریپت


من میخواهم از Map برای پیادهسازی یک Trie استفاده کنم، بنابراین نوع TrieNodeMap را ایجاد کردم. TrieNodeMap دو نوع کلید دارد: یک حرف واحد یا «$» که به معنای پایان یک کلمه است. کلیدی با حرف، به داخل TrieNodeMap نگاشت میشود و «$» به شیء اطلاعات کلمه نگاشت میشود.

این چیزی است که من نوشتم:

type Char = 'a' | 'b' | 'c' | 'd' // just name a few chars;
type TrieNodeMap = Map<Char, TrieNodeMap> | Map<'$', object>;

با این حال، وقتی سعی میکنم از آن استفاده کنم، ویرایشگر خطایی در اطراف 'a' as Char نشان میدهد: "TS2345: آرگومان از نوع 'string' قابل انتساب به پارامتری از نوع 'never' نیست."

let node: TrieNodeMap = new Map();
node.set('a' as Char, new Map());

آیا من کاری اشتباه انجام دادهام، چرا به نظر میرسد که کلید TrieNodeMap از نوع never است؟

پاسخ شماره ۱

برای انجام این کار، شما نیاز دارید Map خود را بارگذاری بیش از حد کنید. به عبارت دیگر، شما نیاز دارید از اشتراک & به جای اجتماع | استفاده کنید.

type Char = 'a' | 'b' | 'c' | 'd' // just name a few chars;
type TrieNodeMap = Map<Char, TrieNodeMap> & Map<'$', object>;

let node: TrieNodeMap = new Map();
node.set('a', new Map());

const trie = node.get('b') // TrieNodeMap | undefined
const obj = node.get('$') // object | undefined

زمین بازی