169 похожих чатов

Всем привет, у меня есть задача написать функцию, которая бы

принимала маппед тип произвольного типа и я бы точно знал какие именно ключи были переданы.
Хочется чтобы ts выдавал ошибку в случае если в типе были переданы несуществующие ключи, при этом был комплишен возможных ключей, если несуществующий ключ всего один, то все хорошо и ts валится, но как только добавляешь существующий ключ то это устраивает ts. Возможно кто то сталкивался с подобным и знает способ как это можно сделать просто?

4 ответов

25 просмотров

увы дженерики в TS ковариантны, поэтому через дженерик желаемого не добиться, но если описать входной аргемент инлайново, то можно получить инвариантное поведение и увидеть желаемую ошибку const query = (s: Partial<Selector<User>>) => selector

Sergey-Alexeev Автор вопроса

Такое к сожалению не подходит, т.к в дальнейшем мне нужен реальный тип объекта который я передал чтобы вывести тип результата, инлайн тип затрет это все

Привет. Могу посоветовать аргумент функции типизировать не как S, а обернуть это в еще один mapped types и там проверку провести

type User = { id: string; name: string } type Selector<T> = { [k in keyof T]?: true } type Strict<T, U> = { [K in keyof T]: K extends keyof U ? T[K] : never } const query = <S extends Selector<S>>(selector: Strict<S, User>) => selector const a = query({id: true}) // it's ok const b = query({qq: true}) // error const c = query({ qq: true, id: true }) // error

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта