@typescript_ru

Страница 80 из 669
Mike
27.09.2016
13:14:08
это так, на основе того что обе реализации имеют одинаковое поведение

спеку позже на эту тему буду смотреть

Adam
27.09.2016
13:17:05
это не совсем баг, просто от наличии let рядом с именем переменной, которой что-то присваивается в цикле, не должна возбуждаться ошибка

наличия*

Google
Adam
27.09.2016
13:18:29
просто повторный проход по телу цикла игнорирует let

Mike
27.09.2016
13:18:44
не дело совсем не в этом

for (let value of array) { let value = 10; // why there is no error on redeclaration block-scoped variable? }

Adam
27.09.2016
13:19:22
В твоём примере вообще переменная счётчика переприсваивается!

Mike
27.09.2016
13:19:32
вот

Adam
27.09.2016
13:19:37
Разумный вопросЖ зачем это нужно?

Mike
27.09.2016
13:19:43
и я хотел бы видеть ошибку в этом случае

это и не нужно

нужна ошибка

я в большом цикле случайно назвал переменную внутри также как счётчик и получил ахинею в рантайме

имхо компилер тут должен ошибку компиляции кидать

Adam
27.09.2016
13:22:24
ладно, я и так уже на этом надуманном примере всю терминологию спутал, не счётчик там, а итератор используется

Mike
27.09.2016
13:22:39
да не суть, со счётчиком тоже самое

Google
Mike
27.09.2016
13:22:50
for (let key in array) { let key = {}; // why there is no error on redeclaration block-scoped variable? }

for (let i = 0; i < 1000; i++) { let i = {}; // why there is no error on redeclaration block-scoped variable? }

тоже самое

Adam
27.09.2016
13:25:08
let list = []; for (let i = 0; i < 10; i++) { let item = i + 1; list.push(item); }

Mike
27.09.2016
13:25:09
пример возник из реальной ошибки допущенной на прошлой неделе

Adam
27.09.2016
13:25:26
вот здесь понятно, почему item не возбуждает исключение?

Mike
27.09.2016
13:25:35
да конечно

блоки - лексический контекст, к рантайму и тому сколько раз исполнен блок понятно это не имеет отношения

Adam
27.09.2016
13:26:24
и в твоём примере то же самое

Mike
27.09.2016
13:26:35
блин, я вообще не отом

{ let i = 10; let i = 11; }

в одном блоке объявили два раза переменную => закономерно получили ошибку

Adam
27.09.2016
13:27:32
и где здесь цикл?

Mike
27.09.2016
13:27:58
когда я в цикле объявляю счётчик, он должен объявляться во внутреннем блоке

а объявляется в неком невидимом промежуточном видимо

for (let i = 0; i < 1000; i++) { let i = {}; } для этого кода самое ожидаемое и очевидное поведение - ошибка компиляции, но её не происходит

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

Adam
27.09.2016
13:30:21
это сделано, возможно, чтобы решить проблему с замыканиями счётчика

ЧТобы обёртку не приходилось использовать для значений счётчика

for (let i = 0; i < 10; i++) { i = {}; console.log(i); }

Google
Adam
27.09.2016
13:41:34
for (let i = 0; i < 10; i++) { let i = {}; console.log(i); }

Без let изменяется счётчик, с let - создаётся новая переменная с тем же именем

Nikita
27.09.2016
15:00:37
я так и делаю
а можно —no-flowlib в конфиг сунуть?

Vladimir
27.09.2016
15:00:49
нет (

Nikita
27.09.2016
15:06:33
@DenisIzmaylov у меня для тебя доклад есть. "React + Flow. Пятиминутка ненависти."

Roman
27.09.2016
16:17:02
for (let i = 0; i < 1000; i++) { let i = {}; // why there is no error on redeclaration block-scoped variable? }
напрашивается, что на тело цикла создается вложенный блок for(let i = 0, b = 0; i < 2; i++, b++) { console.log('b is', b); let i = {}; }

что кстати разумно

Mike
27.09.2016
16:18:58
что кстати разумно
не понимаю разумности, можно подробнее?

Roman
27.09.2016
16:21:31
Ну так а почему тебе должны запрещать переопределять переменную? Это по сути как в ф-ии которая должна замыкаться на внешнюю переменную, взять и переопределить ее. Это просто косяк разработчика

а, вспомнил

чтобы делать вложенные циклы не используя i,j,k,m,n и еще миллион

это приводилось везде как основной пример

Mike
27.09.2016
16:22:27
то что объявлено внутри круглых скобок фора должно объявляться внутри его тела, снаружи оно не доступно

с вложенными всё и так ок

{let i; {let i;}}

так можно

Roman
27.09.2016
16:23:04
ты же можешь создать пустой for(); без тела. Или for() something();

вот и напрашивается что {} создают дополнительный вложенный блок

Mike
27.09.2016
16:23:30
могу и тут будет неявно создан ещё один блок

а когда он явно указан логичнее было бы в него это всё запихать

Google
Roman
27.09.2016
16:29:59
@aquahawk если я правильно понимаю о чем ты - ты предлагаешь для циклов for() {} то что в круглых и фигурных сделать одним блоком

Mike
27.09.2016
16:30:10
да

как во всех си подобных языках емнип

Roman
27.09.2016
16:33:27
вспоминая как бомбило от идиотизма с переменным в coffescript, соглашус с тобой) Так практичней

Дмитрий
27.09.2016
16:33:33
Не надо как в сиподобных, пожалуйста))

Roman
27.09.2016
16:33:59
Но текущей вариант ничему не противоречит тоже

Mike
27.09.2016
16:35:36
в текущем я случайно допустил ошибку и выловил её тестом, вместо того чтобы выловить компилером. Это нехорошо. Я для того тайпу и юзаю чтобы мелкие косяки на компайл тайме ловить. Разбор того почему тест сфейлился занял гораздо больше времени чем бы заняло сообщение от компилера о косяке

Roman
27.09.2016
16:41:13
я просто не понимаю чем это отличается например от let i = 0; let myInt = setInterval(function() { let i = 0; … if(i > 10) {clearInterval(myInt); }… i++; }, 100);

Admin
ERROR: S client not available

Roman
27.09.2016
16:41:41
с точки зрения языка все ок же, и там все ок же, просто можно на уровне языка для for запретить делать так

или даже не так

if(i = 10) { something) } else { clearInterval

типичный косяк, но TS такие вроде алертит

а нода по моему нет

Dreamerinnoise
27.09.2016
17:33:39
Кто-нибудь заводил карму с тс и @types?

Vadim
27.09.2016
17:34:27
Что за @types?

Я заводил карму с тс

А в чем проблема?

Dreamerinnoise
27.09.2016
17:36:35
@types это новые тайпинги от MS

Oleg
27.09.2016
18:48:25
Есть знатоки TypeScript?) Никак не могу понять и нагуглить, в опциях компилятора "outDir": "." Почему не работает? Передаю любую папку, все ок, а в текущую никак не могу получить файлики :(

Google
Viacheslav
27.09.2016
18:52:35
хз, надо код смотреть

а это критично?

тебе зачем?

Oleg
27.09.2016
18:54:14
Пишу npm пакет небольшой, исходники в ./src, хочу чтобы скомпилированные файлы были в ./

マイク
27.09.2016
18:54:48
src/..

?

Oleg
27.09.2016
18:56:37
Чет не помогло

{ "compilerOptions": { "target": "es5", "module": "commonjs", "outDir": "src/..", "sourceMap": true }, "exclude": [ "node_modules" ] }

Denis
27.09.2016
19:31:06
Попробуй ./

Vadim
27.09.2016
19:31:53
В js есть такой синтаксис: var { checked, ...other } = props; Как реализовать это на TS?

Vladimir
27.09.2016
19:33:12
Нет такого синтаксиса

Vadim
27.09.2016
19:33:26
https://facebook.github.io/react/docs/transferring-props.html

Vladimir
27.09.2016
19:33:56
Это не JS

Vadim
27.09.2016
19:35:28
Ок, это ES7 )

Vladimir
27.09.2016
19:35:53
Нет, это не ES7

Vadim
27.09.2016
19:36:07
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

// ES7 - not implemented in Firefox 47a01 ({a, b, ...rest} = {a:1, b:2, c:3, d:4});

Vladimir
27.09.2016
19:36:50
ES7 это в лучшем случае ES2016

В ES2016 этого нет

Vadim
27.09.2016
19:37:06
Я же ссылку кинул

Страница 80 из 669