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

Привет! Знатоки TS, Подскажите пожалуйста с проблемой https://www.typescriptlang.org/play?#code/C4TwDgpgBAglC8UDeAoK6oEMBcUDOwATgJYB2A5gDRoYBGuBJFKAviiqJFAEILI3oAxgH4GRMuVZQAZLHaCA9qQL5svRKgxZcAcjx4d1LfSg6AHmcMCog3QDc7O1u3QAzAK6lBwYkqjAIAgAKTChcGABKfi1FZQUAGwgAOniFchCIlwxCCGB3QlIoUnd4+Jo2FAB6SqhAehAoQFEQQD4QQHEQQGEQKEAhEDbOqDbAJhBADhBAFhBBzsAZEChAPBBACRBBwEYQQC4QNpoA4LwIoA type A = {

a: string,
b: string
}

type B = {
c?: string
} & A

const s:B = {
a: 'ss',
b: 'xx',
c: 'vv'
}

function test(a : A) {
console.log(a)

return null
}

// Я хочу тут увидить Ошибку
test(s)

Потому что я не хочу допустить такого, что моя функция test, которая принимает только тип A, смогла "принять" B который & от A.

Все strict, strict функции и т.п. стоят

Я понимаю почему так происходит, так как это не "объединение", а пересечение, но я хочу понять Как это можно пофиксить ?

7 ответов

19 просмотров

Почему не хотите? Это ж классический пример полиморфизма

Ali- Автор вопроса
Volodymyr Klimov
Почему не хотите? Это ж классический пример полимо...

Потому что у меня к примеру есть 2 формы. 2я расширяет первую. Вот во второй форме, у меня поля принимают B тип. Но для её работы, мне нужно вначале отправить все важные типы из A в эту функцию, что бы она сделала запрос. При этом кто то может по "ошибке" передать лишний ключ c и тогда бекенд упадет, так как не ожидает этого ключа. Я вот хочу что бы мне ts ругался и говорил, что сделать там тайпгард, либо отсортируй, либо вытащи и т.п. А то сейчас он просто это пропускает

Ali
Потому что у меня к примеру есть 2 формы. 2я расш...

Любой язык будет пропускать. У вас, фактически, наследование. И вы передаете переменную в параметр, у которого более общий тип Решите это просто явным обращениям к существующим в типе А полям, чтобы не было ничего лишнего

Ali- Автор вопроса

Да, это я понимаю, что выше и описал. Я просто думал может есть какие то "хаки" и т.п. , как это обойти, потому что то КАК нужно понятно. Но вот этот кейс , когда новичок работает и он просто передает и не задумается что там может прийти лишний ключ, удручает.

Ali
Да, это я понимаю, что выше и описал. Я просто ду...

Ну так а почему вашу систему ломает "что-то лишнее"?

Будто бы вам нужны брендированные типы

Ali- Автор вопроса
Vladislav Stepanov
Будто бы вам нужны брендированные типы

Спасибо за совет, но это уже в другое русло пойдет) В целом я согласен с выше, что нечего "костыли" выдумать, нужно самому вытаскивать то, что нужно и передавать со спокойной душой. Так же согласен с человеком выше, по поводу "переписать бекенд", там много эдж кейсов за собой потянет

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

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

У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
что за асемблер кста?
Shvabrikk Nya
19
всем привет. реально ли понять чем в процессе занята память? delphi/linux, процесс свой
Handatros
12
Добрый день! Пробую отловить исключение EConvertError: function _TryTextToDouble(var DoubleVar: Extended; Text: String): Boolean; begin try DoubleVar := StrToFloat...
Kirill Filippenok
19
А где @Grinyaha уважаемый пропал?
Am Ambrion
14
This automated cryptocurrency trading system uses intelligent algorithms to buy low and sell high on leading crypto exchanges. Many users have already enjoyed significant prof...
Endu Wako
1
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Сделал краткий обзор магазина из статьи и заодно там же записал инструкцию по развёртыванию. https://www.youtube.com/watch?v=8-sE1vNk95Q (чё думаете по звуку? кое-что поменял...
Andrey K
17
Привет, коллеги! Возникла задача ограничить максимальный размер вложений для определённых расширений, например, чтобы для изображений лимит был 10 МБ, а для видео — 100 МБ. Ог...
Andro
1
Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Карта сайта