Если вы действительно пишете C, и набор ключей известен, вы бы гораздо лучше сохранили значения в struct
вместо некоторой раздутой хеш-таблицы. Есть таблица static const
:
offsetof
] macro) и использовать это для синтаксического анализа строки запроса и заполнения структуры.
Это было раскрыто в примечаниях к выпуску, когда вывод типа из условных типов был введен. Будет ли это объединение или пересечение, зависит от дисперсии предполагаемого типа. Интуитивно понятно, что если тип выводится как общий тип для нескольких значений, он может быть любым из них (объединение), но если он выводится как тип аргумента для нескольких функций, он должен быть приемлемым для любой из них (пересечение). [116 ]
Цитата из примечаний к выпуску:
Следующий пример демонстрирует, как несколько кандидатов на одну и ту же переменную типа в ко-вариантных позициях вызывает вывод типа объединения:
blockquote>type Foo<T> = T extends { a: infer U, b: infer U } ? U : never; type T10 = Foo<{ a: string, b: string }>; // string type T11 = Foo<{ a: string, b: number }>; // string | number
Аналогичным образом, несколько кандидатов на одну и ту же переменную типа в противоположных позициях приводят к выводу типа пересечения:
blockquote>type Bar<T> = T extends { a: (x: infer U) => void, b: (x: infer U) => void } ? U : never; type T20 = Bar<{ a: (x: string) => void, b: (x: string) => void }>; // string type T21 = Bar<{ a: (x: string) => void, b: (x: number) => void }>; // string & number
Дополнительное обсуждение можно найти в PR реализует эту функцию.
В качестве примечания, он позволяет использовать некоторые интересные трюки, такие как объединение в пересечение типов пересечения .