@typescript_ru

Страница 635 из 669
Aleh
05.06.2018
21:15:25
Ну т.е. да, as это повод задуматься

Winterhold
06.06.2018
00:15:12
Всем привет

Максим
06.06.2018
04:35:18
Всем привет! Кто-то сталкивался с таким поведением?http://www.typescriptlang.org/play/index.html#src=function%20onError(error%3A%20Error)%3A%20never%20%7B%0D%0A%09throw%20error%3B%0D%0A%7D%0D%0A%0D%0Aconst%20numbers%3A%20number%5B%5D%20%3D%20%5B1%2C%202%2C%203%5D%3B%0D%0A%0D%0Afunction%20getAllowedNumberOrThrow1(n%3A%20number)%3A%20number%20%7C%20never%20%7B%0D%0A%09const%20nFromArray%20%3D%20numbers.find(num%20%3D%3E%20num%20%3D%3D%3D%20n)%3B%0D%0A%0D%0A%09if%20(nFromArray%20%3D%3D%3D%20undefined)%20%7B%0D%0A%09%09onError(new%20Error(%60There%20is%20no%20%24%7Bn%7D%20in%20%5B%24%7Bnumbers.join(%22%2C%20%22)%7D%5D%60))%3B%0D%0A%09%7D%0D%0A%0D%0A%09%2F*%0D%0A%09Type%C2%A0'number%C2%A0%7C%C2%A0undefined'%C2%A0is%C2%A0not%C2%A0assignable%C2%A0to%C2%A0type%C2%A0'number'.%0D%0A%09Type%C2%A0'undefined'%C2%A0is%C2%A0not%C2%A0assignable%C2%A0to%C2%A0type%C2%A0'number'.%0D%0A%09*%2F%0D%0A%09return%20nFromArray%3B%0D%0A%7D%0D%0A%0D%0A%0D%0Afunction%20getAllowedNumberOrThrow2(n%3A%20number)%3A%20number%20%7C%20never%20%7B%0D%0A%09const%20nFromArray%20%3D%20numbers.find(num%20%3D%3E%20num%20%3D%3D%3D%20n)%3B%0D%0A%0D%0A%09if%20(nFromArray%20%3D%3D%3D%20undefined)%20%7B%0D%0A%09%09throw%20new%20Error(%60There%20is%20no%20%24%7Bn%7D%20in%20%5B%24%7Bnumbers.join(%22%2C%20%22)%7D%5D%60)%3B%0D%0A%09%7D%0D%0A%0D%0A%09%2F%2F%20OK%0D%0A%09return%20nFromArray%3B%0D%0A%7D

Pawel
06.06.2018
05:20:37
с каким поведением?

Google
Alex
06.06.2018
06:06:54
С таким поведением http://www.typescriptlang.org/play/index.html#src=function%20onError(error%3A%20Error)%3A%20never%20%7B%0D%0A%09throw%20error%3B%0D%0A%7D%0D%0A%0D%0Aconst%20numbers%3A%20number%5B%5D%20%3D%20%5B1%2C%202%2C%203%5D%3B%0D%0A%0D%0Afunction%20getAllowedNumberOrThrow1(n%3A%20number)%3A%20number%20%7C%20never%20%7B%0D%0A%09const%20nFromArray%20%3D%20numbers.find(num%20%3D%3E%20num%20%3D%3D%3D%20n)%3B%0D%0A%0D%0A%09if%20(nFromArray%20%3D%3D%3D%20undefined)%20%7B%0D%0A%09%09onError(new%20Error(%60There%20is%20no%20%24%7Bn%7D%20in%20%5B%24%7Bnumbers.join(%22%2C%20%22)%7D%5D%60))%3B%0D%0A%09%7D%0D%0A%0D%0A%09%2F*%0D%0A%09Type%C2%A0'number%C2%A0%7C%C2%A0undefined'%C2%A0is%C2%A0not%C2%A0assignable%C2%A0to%C2%A0type%C2%A0'number'.%0D%0A%09Type%C2%A0'undefined'%C2%A0is%C2%A0not%C2%A0assignable%C2%A0to%C2%A0type%C2%A0'number'.%0D%0A%09*%2F%0D%0A%09return%20nFromArray%3B%0D%0A%7D%0D%0A%0D%0A%0D%0Afunction%20getAllowedNumberOrThrow2(n%3A%20number)%3A%20number%20%7C%20never%20%7B%0D%0A%09const%20nFromArray%20%3D%20numbers.find(num%20%3D%3E%20num%20%3D%3D%3D%20n)%3B%0D%0A%0D%0A%09if%20(nFromArray%20%3D%3D%3D%20undefined)%20%7B%0D%0A%09%09throw%20new%20Error(%60There%20is%20no%20%24%7Bn%7D%20in%20%5B%24%7Bnumbers.join(%22%2C%20%22)%7D%5D%60)%3B%0D%0A%09%7D%0D%0A%0D%0A%09%2F%2F%20OK%0D%0A%09return%20nFromArray%3B%0D%0A%7D

Максим
06.06.2018
06:52:28
если throw ошибки вынести в отдельную функцию onError, то компилятор не понимает, что поток выполнения прерывается на месте вызова этой функции onError

если throw ошибки вынести в отдельную функцию onError, то компилятор не понимает, что поток выполнения прерывается на месте вызова этой функции onError

в strict: true моде

если убираю флаг strict то норм(

Максим
06.06.2018
10:30:15
в playground в первой строчке есть эта сигнатура

Morsik
06.06.2018
10:30:41
А, не посмотрел

Artur
06.06.2018
10:36:32
в playground в первой строчке есть эта сигнатура
добавь просто return onError, суть же не поменяется

Максим
06.06.2018
10:37:35
ага - return помогло

спасибо

Pawel
06.06.2018
12:08:13
есть такой вот класс export class Game { id: number; home: string; away: string; score_home: number; score_away: number; // ещё до хера полей } есть класс, описывающий как изменилась игра export class GameChanges { id: number; order: number | null; score_home: number | null; score_away: number | null; in_play: boolean | null; time: string | null; // и т.д. - ещё до хера полей } у класса Game есть метод, которая применяет изменения applyGameChanges (a:GameChanges) { this.order = a.order ? a.order : this.order; this.score_home = a.score_home ? a.score_home : this.score_home; this.score_away = a.score_away ? a.score_away : this.score_away; this.in_play = a.in_play ? a.in_play : this.in_play; // и т.д. }; Вопрос такой - как нормально переписать applyGameChanges в обощённом виде, чтобы какой то цикл по всем полям обеих классов?

Kirill
06.06.2018
12:08:28
А type guards только с if работает? Тернарки не понимает?

Google
Pawel
06.06.2018
12:11:45
Не на том экономишь
1. взять что-то типа списка строк 2. цикл по полям Game и полям GameChanges 3. если if (GameChanges[filed]) то установить Game[filed] = GameChanges[filed]

как это сделать в ts

Дмитрий
06.06.2018
12:12:12
4. Страдать от использования объектов не по назначению

Pawel
06.06.2018
12:12:37
шта?

Дмитрий
06.06.2018
12:13:41
Если тебе нужно итерироваться по ключам и значениям, ты используешь объекты и классы вместо Map, не по назначению

После чего, естественно, огребешь, но жалеть будет уже поздно

Pawel
06.06.2018
12:21:30
После чего, естественно, огребешь, но жалеть будет уже поздно
предлагаешь вместо этих класов всё держать в чём то типа { [K in string]: string | number };?

Дмитрий
06.06.2018
12:22:08
Нет, предлагаю задуматься почему у тебя код разросся так что даже перечислить его затруднительно

Pawel
06.06.2018
12:24:09
Нет, предлагаю задуматься почему у тебя код разросся так что даже перечислить его затруднительно
ну так с сервера приходит сущность с такмими полями. Была мысль это как-то типизировать, но хз, может действительно мапа проще

Дмитрий
06.06.2018
12:25:13
Типизировать хорошо общение с бэком — идеальный вариант но часто невозможен

Pawel
06.06.2018
12:28:22
Типизировать хорошо общение с бэком — идеальный вариант но часто невозможен
у меня есть тайпскриптификатор из голанга. он и типизирует собственно - генерирует тайпскрипт из голанга. Не самом же я эту херню написал

Дмитрий
06.06.2018
12:28:41
Ну норм

Vadim
06.06.2018
12:41:41
Всем привет. А вакансии можно сюда скидывать?

Alexander
06.06.2018
12:41:53
Нет

Vadim
06.06.2018
12:42:12
А есть какой-то канал для TS вакансий?

Alexander
06.06.2018
12:42:16
Есть @js_jobs вроде

Даже @javascript_jobs :)

⭐️Alexandra
06.06.2018
12:42:40
Vadim
06.06.2018
12:49:12
Спасибо большое

Google
Pawel
06.06.2018
13:15:32
В правилах группы такого не сказано что сюда нельзя кидать вакансии. Юзер @akrasnov96 - не админ. Поэтому предлагаю юзеру @vsmakhtin не обращать внимание на вахтёров.

Alexander
06.06.2018
13:18:13
Давай админа спросим @mkusher

Vadim
06.06.2018
13:18:22
Ок, у нас просто есть классная вакансия именно для TypeScript разработчика, я CTO, поэтому можно вопросы писать мне напрямую.

Тогда ждем что скажет @mkusher

Aleh
06.06.2018
13:19:10
нет, вакансии в @js_jobs

Vadim
06.06.2018
13:19:49
Понял, спасибо, там уже опубликовал

Dmitrii
06.06.2018
13:22:05
@mkusher а babel-plugin-typescript умеет удалять ненужные импорты (типа интерфейсов) или оставляет? по идее он же не знает ничего про семантику

Aleh
06.06.2018
13:23:03
@mkusher а babel-plugin-typescript умеет удалять ненужные импорты (типа интерфейсов) или оставляет? по идее он же не знает ничего про семантику
Должен уметь, потому что по сути надо удалить те импорты, которые использовались только как типы

Вот с const enum не получится уже, там надо знать значения

Dmitrii
06.06.2018
13:34:13
Должен уметь, потому что по сути надо удалить те импорты, которые использовались только как типы
по идее он либо должен запустить ts, чтобы понять что можно удалить, либо два прохода - отбросить типы, а потом выкинуть неиспользуемые импорты

Антон
06.06.2018
19:18:21
Можно ли сделать такой декоратор для класса, чтобы при вызове любого метода класса производились заданные действия?

Artur
06.06.2018
20:01:28
Можно ли сделать такой декоратор для класса, чтобы при вызове любого метода класса производились заданные действия?
можно function decorator(Class: new (...args: any[]) => {}) { const descriptor = Object.getOwnPropertyDescriptors(Class.prototype); const keys = Object.keys(descriptor); for (const key of keys) { if (typeof descriptor[key].value === 'function') { Object.defineProperty(Class.prototype, key, { configurable: true, value() { console.log('called method ' + key); return descriptor[key].value.apply(this, arguments); }, }); } } } @decorator class Abc { foo() {} bar() {} } const abc = new Abc(); abc.foo(); // called method foo abc.bar(); // called method bar

★nton
07.06.2018
01:45:57
https://www.youtube.com/watch?v=M3BM9TB-8yA

https://github.com/ry/deno

Дмитрий
07.06.2018
01:49:36
https://www.youtube.com/watch?v=M3BM9TB-8yA
Не гошка, не завёз типы, завёз нодмодули, сделал, а мог бы сычевать на гошке че ещё там

★nton
07.06.2018
02:03:24
Кек

Google
NEOQAZAQUE
07.06.2018
06:41:53
Как-то тут поясняли что лучше в стрелочных функциях всегда ставить скобки для параметров

Andrey
07.06.2018
06:42:11
Есть такой фетиш.

NEOQAZAQUE
07.06.2018
06:42:11
Все таки лучше ставить?

Andrey
07.06.2018
06:42:19
Если хочется.

Я не ставлю. Сова ставит.

Abu
07.06.2018
06:48:08
Andrey
07.06.2018
06:48:20
А Абрамов?)
А Абрамов в Лондоне.

Kendr
07.06.2018
06:56:48
Все таки лучше ставить?
Как удобнее, так и делай (оборачивай)

Andrey
07.06.2018
06:57:08
А лучше поставь что-то типа преттиера и забей.

Gordey
07.06.2018
06:57:27
Еще лучше, используй 2 пробела вместо 4

(простите)

Kendr
07.06.2018
06:57:32
А лучше поставь что-то типа преттиера и забей.
Сэр, вы на холивар напрашиваетесь?....ю

Andrey
07.06.2018
06:57:56
Сэр, вы на холивар напрашиваетесь?....ю
Нет. Я лишь указал в какую сторону смотреть. А там пусть сам решает что ставить.

Пёс Цифрового Сопротивления
07.06.2018
07:11:32
И все это из дефолта cli идет

Max
07.06.2018
08:00:59
В vscode

Oleg
07.06.2018
08:14:16
там без скобочек он интерфейс не поймет

Google
Oleg
07.06.2018
08:15:04
будет ругаться на ( item : Item => {} )

Andrey
07.06.2018
08:16:51
Кстати да, в ts вообще нет смысла без скобок писать.

Какой вывод типов?

Да, это чат тс. Не ошибся.

А, понял. Ну да, соглашусь.

Nikolay
08.06.2018
05:45:41
Привет, всем, Я тут нашел интересный кейс, когда в компиляторе не срабатывает проверка типа и пропускает экстра-свойства, если передавать ссылку на объект в функцию. Пример - https://pastebin.com/qQ2MVu9R Как такое может быть? Можно ли исправить?

Nikolay
08.06.2018
06:08:28
Это by design, потому что нету exact type
Вряд ли, для инлайновых объектов тип все-таки выводится. Тем не менее, мой пример не работает при использовании typescript@3.0.0-dev.20180607 - https://github.com/Microsoft/TypeScript/pull/19513

Anton
08.06.2018
06:14:58
Вряд ли, для инлайновых объектов тип все-таки выводится. Тем не менее, мой пример не работает при использовании typescript@3.0.0-dev.20180607 - https://github.com/Microsoft/TypeScript/pull/19513
Это не баг, это структурная типизация. Если в объекте есть все свойства, которые нужны - он нам подходит. Когда ты создаёшь объект в месте передачи, структурная типизация не работает, потому что тут она не нужна. Если будешь создавать объект и явно задашь тип переменной, TS лишние свойства в неё положить не даст, но если ты создашь объект со свойствами foo и bar, а потом попытешься по ссылке передать его в переменную, тип которой ждёт только foo, то такое прокатит.

Artur
08.06.2018
06:23:40
Ну и вот как бы: https://github.com/Microsoft/TypeScript/issues/12936

Pawel
08.06.2018
06:52:28
Когда ты создаёшь объект в месте передачи, структурная типизация не работает, потому что тут она не нужна. орнул. с чего это она тут не нужна?

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