M
function join<TToken
extends { kind: string }>(
…). Вместо string можешь еще более уточнить. И будет у тебя работать только с типами у которых есть свойство kind, а не только пропсы. Плюс ты можешь еще и в рантайме проверить теперь соответствие структуры и типа объекта (ну или сделать сопоставление шаблону)