
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

Vladimir
27.09.2016
15:00:49
нет (

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

Roman
27.09.2016
16:17:02
что кстати разумно

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
Я же ссылку кинул