Порридж В Ко-ливинге
Viktor
А разве | это не union?
я не вижу где ты там его используешь. я имею в виду типа result = [] as UnionOfLinkResultAndCrawlTree[]
Viktor
кастить тип это зло же
я не хочу кастить, я предлагаю создать юнион один раз и с ним работать
Порридж В Ко-ливинге
я не вижу где ты там его используешь. я имею в виду типа result = [] as UnionOfLinkResultAndCrawlTree[]
Так он по дефолту такой тип ему ставит Array<LinkResult> | Array<CrawlTree> Причем если условие 1, то будет первый тип, если 2, то второй. А TS походу Блондинка, забывает что при условии 1 у нас будет Array<LinkResult> 🤣
Порридж В Ко-ливинге
Короче проблема решена const results = new Array<LinkResult>(); const tree = new Array<CrawlTree>();
Порридж В Ко-ливинге
Мне конечно и платят за часы, но я капал щас думать как это сделать грамотно, я тут не фреймворк пишу 😅
Viktor
Так он по дефолту такой тип ему ставит Array<LinkResult> | Array<CrawlTree> Причем если условие 1, то будет первый тип, если 2, то второй. А TS походу Блондинка, забывает что при условии 1 у нас будет Array<LinkResult> 🤣
а ты точно не путаешь компайлтайм и рантайм? кому там что TS ставит во время статического анализа если не понятно как условие будет выполняться в рантайме?
Viktor
может я чего-то не знаю про TS, конечно. мог отстать.
Viktor
если такая магия и есть, я бы считал это злом 😊
Порридж В Ко-ливинге
Ну или тут же догадывается. let t: number | string = a ? 5 : ‘5’; if (a) { t++; }
Ilia
Ну TS же догадывается такое: var obj: {a: number; b?: string} = {a: 5} if (‘b’ in obj){ console.log(obj.b); }
название пропа 'b' у тебя известно, поэтому тс и сокращает тип до нужного, а значение булина(если это не константа) у тебя неизвестно. если бы название пропа 'b' было бы не известно, то сузить тип можно было бы только через хелпер, который возвращал бы is type
Порридж В Ко-ливинге
Ну или тут же догадывается. let t: number | string = a ? 5 : ‘5’; if (a) { t++; }
Ок, тут ему тоже не Очевидно… // Ошибку выдает let test = options.serverRoot ? 5 : '5'; if (options.serverRoot) { ++test; }
Порридж В Ко-ливинге
Ну ладно, ладно, на этот раз TS выйграл.
Viktor
Ну или тут же догадывается. let t: number | string = a ? 5 : ‘5’; if (a) { t++; }
здесь прекрасно всё. это или строка или число, которое в рантайме мы уже приводим к булеану неявно, а потом ещё ++ у строки вызываем 😂 я понимаю, что это модельный пример, но просто смешно как статическая типизация и динамическая родная для js легко могут смешиваться потому что искусственных границ на самом деле нет.
Порридж В Ко-ливинге
А a где определена?
Рандомная. В этом же и прелесь. Если бы была определена он бы догадался бы
Порридж В Ко-ливинге
Наверное в TS есть такая настройка, “логически определять тип”
Lynn «Кофеман»
Ок, тут ему тоже не Очевидно… // Ошибку выдает let test = options.serverRoot ? 5 : '5'; if (options.serverRoot) { ++test; }
Ну просто тут никто не гарантирует что serverRoot это не getter какой-нибудь рандомный, так что вполне может вернуть разные значения в двух последовательных строках
Lynn «Кофеман»
Ну или тут же догадывается. let t: number | string = a ? 5 : ‘5’; if (a) { t++; }
А тут ts уверен, что значение в этих двух строках одно и тоже. Ты её поди константой объявил
Порридж В Ко-ливинге
А тут ts уверен, что значение в этих двух строках одно и тоже. Ты её поди константой объявил
Неа, тут Тоже TS тупит( Вроде настройки TS обычные. const a = Math.random() let t: number | string = a ? 5 : '5'; if (a) { t++; }
Порридж В Ко-ливинге
Lynn «Кофеман»
Неа, тут Тоже TS тупит( Вроде настройки TS обычные. const a = Math.random() let t: number | string = a ? 5 : '5'; if (a) { t++; }
Но вообще-то насколько я помню TS не настолько умный что бы проверять тип одной переменной по значению другой.
Порридж В Ко-ливинге
Но вообще-то насколько я помню TS не настолько умный что бы проверять тип одной переменной по значению другой.
Может быть. Я просто помню, что TS догадывался с полями у объектов, вот и тут ожидал “магии” (ну, не магии, простой проверки)
Timofey
JFYI: gmail и youtube лежит 😎
Viktor
JFYI: gmail и youtube лежит 😎
так-так-так. очень ждём разбора полётов. и желаем успехов тем, кто на дежурстве сейчас.
Viktor
у кого-то прямо сейчас знатно пригорело..
Иван
не часто такое бывает)
Иван
Если честно вообще первый раз вижу
Timofey
Gmail последний раз лежал лет 10 назад , около часа
Roman
Потом будем вспоминать: “Это был конец 2020…”
Порридж В Ко-ливинге
JFYI: gmail и youtube лежит 😎
Прикольно 😃😃😃
Порридж В Ко-ливинге
Timofey
в нашем чатике шуточки за 300 Google’s DevOps guys aren’t hitting the availability OKR this quarter
Порридж В Ко-ливинге
Ребята, приятно было с вами пообщаться. Я позвоню своей семье пока не ебнул метеорит, до свидания 👋
Viktor
там же какие-то безумные девятки после запятой, наверное
Timofey
там же какие-то безумные девятки после запятой, наверное
я думаю их 6 (99,9999%), но могу ошибаться Percentage calculation Availability % Downtime per year Downtime per week 99.995% ("four and a half nines") 26.30 minutes 30.24 seconds 99.999% ("five nines") 5.26 minutes 6.05 seconds 99.9999% ("six nines") 31.56 seconds 604.80 milliseconds 99.99999% ("seven nines") 3.16 seconds 60.48 milliseconds
Yuri
JFYI: gmail и youtube лежит 😎
Это как раз онбординг коронавирусных новых работников закончился, с онлайновыми онсайтами
Порридж В Ко-ливинге
Sergei
На ваш взгляд это нормально, избегать else. Я в основном использую continue/break/return для выхода из функции/цикла и тд?
Sergei
Если их больше одного вообще трясёт когда такое вижу. Тернарный оператор ещё люблю
Lynn «Кофеман»
Короче, опять dfs какой-то получается 😄
Какой такой dfs? Два вложенных цикла и никаких гвоздей =)
Lynn «Кофеман»
А вообще из-за 36-битности пришлось работать со строками вместо битовых операций над числами в JS
Lynn «Кофеман»
О, я баклан, есть же BigInt!
Evgeniy
Кому как, конечно
Viktor
Какой такой dfs? Два вложенных цикла и никаких гвоздей =)
у меня просто в тулбоксе есть один микроскоп, которым я и гвозди забиваю в том числе 😂
Lynn «Кофеман»
У меня вот такая жуть с вложенными циклами =)
Evgeniy
Точнее "как". Просто по маске прошёл?
Lynn «Кофеман»
Примерно такие масивы. Это соответствуют позициям X в маске
Lynn «Кофеман»
А в mask.value вместо X подставлены 1.
Evgeniy
По битам
TheHesoyam
https://youtube.com/playlist?list=PLc82OEDeni8RuE-PRirh1sgsfmaB4ai_q Solution of aoc 13 day without hacking
Evgeniy
Красота)
Пока воздержусь)
Viktor
Viktor
https://youtube.com/playlist?list=PLc82OEDeni8RuE-PRirh1sgsfmaB4ai_q Solution of aoc 13 day without hacking
Контур показывает чудеса хайринга, я смотрю. Хайпануть на теме в поиске 😊
Lynn «Кофеман»
Вот, они тоже используют BigInt =) Про который я забыл сначала.
Evgeniy
На реддите еще есть подборка стримеров
Evgeniy
https://www.reddit.com/r/adventofcode/wiki/streamers
Lynn «Кофеман»
В JS битовые операции только до 32 бит для типа Number.
Evgeniy
Вот оно что. Печаль)
Evgeniy
Ну хотя бы BigInt есть
Evgeniy
А то пришлось бы извращаться