@typescript_ru

Страница 281 из 669
Азиз
17.07.2017
09:13:09
ой ща

export class AuthInfo { userName: string = ''; accessToken: string = ''; refreshToken: string = ''; expires: number = 0; issued: number = 0; get isAuthTokenValid(): boolean { var now: number = +(new Date()); debugger return now < this.expires; } }

вот

Google
Friedrich
17.07.2017
09:13:29
Ок, тут геттер есть.

Летучая
17.07.2017
09:13:30
у тебя всё ещё нет конструктора

Adam
17.07.2017
09:13:38
вот
конструктор будет, если все поля проинициализированы

Азиз
17.07.2017
09:13:38
так у тебя и конструктора нет
от пустого конструктора, есть толк?

Friedrich
17.07.2017
09:13:38
А зачем тут конструктор?

Adam
17.07.2017
09:13:58
не правильно
иди в жопу, я гуру

Friedrich
17.07.2017
09:14:28
export class AuthInfo { userName: string = ''; accessToken: string = ''; refreshToken: string = ''; expires: number = 0; issued: number = 0; get isAuthTokenValid(): boolean { var now: number = +(new Date()); debugger return now < this.expires; } }
Всё работает же: http://www.typescriptlang.org/play/#src=class%20AuthInfo%20%7B%0D%0A%20%20%20%20userName%3A%20string%20%3D%20''%3B%0D%0A%20%20%20%20accessToken%3A%20string%20%3D%20''%3B%0D%0A%20%20%20%20refreshToken%3A%20string%20%3D%20''%3B%0D%0A%20%20%20%20expires%3A%20number%20%3D%200%3B%0D%0A%20%20%20%20issued%3A%20number%20%3D%200%3B%0D%0A%0D%0A%20%20%20%20get%20isAuthTokenValid()%3A%20boolean%20%7B%0D%0A%20%20%20%20%20%20%20%20var%20now%3A%20number%20%3D%20%2B(new%20Date())%3B%0D%0A%20%20%20%20%20%20%20%20debugger%0D%0A%20%20%20%20%20%20%20%20return%20now%20%3C%20this.expires%3B%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A%0D%0Avar%20x%20%3D%20new%20AuthInfo()%3B%0D%0Aconsole.log(x.isAuthTokenValid)%3B

Ну, я там дописал снизу var x = new AuthInfo(); console.log(x.isAuthTokenValid); Видно, что геттер есть и он работает.

Азиз
17.07.2017
09:15:04
иди в жопу, я гуру
у меня нету ни времени ни желания с тобой спорить! успокойся

Friedrich
17.07.2017
09:15:07
Конструктор был сгенерирован автоматически.

Ребята, не ругайтесь, а то модератора на вас натравлю.

Google
Friedrich
17.07.2017
09:16:15
export class AuthInfo { userName: string = ''; accessToken: string = ''; refreshToken: string = ''; expires: number = 0; issued: number = 0; get isAuthTokenValid(): boolean { var now: number = +(new Date()); debugger return now < this.expires; } }
Вон я показал пример, что код рабочий. А в каком же контексте не работает? Может быть, ты создаёшь объект, не вызывая конструктор? Кастуешь что-нибудь к этому классу, например?

Азиз
17.07.2017
09:16:32
да там каст есть

сейчас

Friedrich
17.07.2017
09:16:42
Показывай, разберёмся.

Adam
17.07.2017
09:17:12
какая разница, есть каст или нет? Он говорит, что в браузере нет у него каких-то свойств

Friedrich
17.07.2017
09:17:40
какая разница, есть каст или нет? Он говорит, что в браузере нет у него каких-то свойств
Я полагаю, что «нет свойств» потому, что не был вызван конструктор. Мы ему щас это объясним, он поймёт и всё будет ок.

Азиз
17.07.2017
09:18:03
var user = <AuthInfo>JSON.parse("{ 'userName': 'xoxo'}"); if (user.isAuthTokenValid) console.log('valid');

Friedrich
17.07.2017
09:18:36
var user = <AuthInfo>JSON.parse("{ 'userName': 'xoxo'}"); if (user.isAuthTokenValid) console.log('valid');
Короче, если коротко, то это так не работает.

Adam
17.07.2017
09:18:52
я даже не понял, что тут имелось в виду

Friedrich
17.07.2017
09:18:52
В объекте, полученном из JSON, полюбому не будет никаких твоих кастомных свойств и методов.

Используя преобразование типа, ты как бы говоришь "я знаю, что делаю, и гарантирую, что JSON.parse мне вернёт объект именно того класса, в который я кастую". Это утверждение у тебя ложно.

Поэтому ничего и не работает.

Я предлагаю тебе сделать конструктор с параметром, который будет принимать вот этот жисон из объекта.

Adam
17.07.2017
09:19:52
утверждение типя я знаю, я не понял, зачем он парсит готовый объект

Friedrich
17.07.2017
09:20:58
утверждение типя я знаю, я не понял, зачем он парсит готовый объект
Ну новичок человек, ничего страшного. Разберётся и научится.

Adam
17.07.2017
09:21:42
тут недавно какие-то $values искали и недоумевали, почему же они такие сложные!

те темы, которые не поняли обозвали $values и начали спрашивать про несуществующие $values

Ну новичок человек, ничего страшного. Разберётся и научится.
Я смотрю, вы разбираетесь в ts. Концепция fresh-объектов ломает обратную совместимость с кодом предыдущих версий ts?

мне почему-то кажется, что да. Хотя лень пробовать

Google
Friedrich
17.07.2017
09:27:45
Видимо, недостаточно разбираюсь, чтобы ответить на вопрос. Что за fresh-объекты такие? В спеке по этому слову нашёл только "fresh object literal", и не уверен, что речь именно о том, о чём мы говорим.

Friedrich
17.07.2017
09:28:12
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-1-6.html

Поломка совместимости в 1.6 кого-то вообще заботит? :)

Adam
17.07.2017
09:28:38
литералы объектов нельзя расширять, если их типом объявлен тип литерала объекта

Friedrich
17.07.2017
09:28:41
(и, да, оно ломало совместимость, в этом и было намерение)

Adam
17.07.2017
09:32:18
кстати, кому-нибудь удавалось найти декларацию any или void в декларациях языка? Я хотел посмотреть на иерархию наследования «any - void - null - object» своими глазами

я только их в качестве токенов нашёл, может, по-другому они там и не присутствуют

Friedrich
17.07.2017
09:39:03
Я бы и ожидал, что это волшебные типы, которым не требуется декларация.

Adam
17.07.2017
09:39:40
Я бы и ожидал, что это волшебные типы, которым не требуется декларация.
я когда в спеке прочитал, что void - подтип any, полночи не спал

Friedrich
17.07.2017
09:39:42
Если б это было не так, то было бы непонятно, как их декларировать — даже тот же самый number, не говоря уже о void или never.

Friedrich
17.07.2017
09:40:21
Да? Интересно! А как именно?

Adam
17.07.2017
09:40:39
Да? Интересно! А как именно?
declare const number: NumberConstructor - вроде так

Friedrich
17.07.2017
09:40:46
о_О

Adam
17.07.2017
09:41:11
сейчас посмотрю

Friedrich
17.07.2017
09:42:19
Попробовал перейти на декларацию number из VSCode — говорит no definition found.

Adam
17.07.2017
09:42:53
Friedrich
17.07.2017
09:43:12
Ну а вот Number, например — да, настоящий интерфейс с методами.

Google
Friedrich
17.07.2017
09:43:34
А что ты хотел там увидеть?
Не знаю. Вот товарищ выше говорил, что была такая декларация где-то. Но, видимо, ошибся.

Adam
17.07.2017
09:45:59
Кстати, сколько знаете мест, где typescript не принимает js-код (а должен включать подмножество js) при отключённом «no implicit any?»

Aleh
17.07.2017
09:47:30
Тайпчекер которые не принимает?

Admin
ERROR: S client not available

Adam
17.07.2017
09:48:11
Тайпчекер которые не принимает?
ну в смысле любой код js уже является валидным в ts - так декларируется маркетологами. Но это не так - в нескольких случаях, как минимум

Adam
17.07.2017
09:50:12
Aleh
17.07.2017
09:51:34
[1, 2, 3].map(a => a.split) - валидный жс, но тайпчекер ругнется, не понимаю какой смысл это обсуждать

Adam
17.07.2017
09:52:27
[1, 2, 3].map(a => a.split) - валидный жс, но тайпчекер ругнется, не понимаю какой смысл это обсуждать
чё за бред ты написал? Я про код, имеющий смысл, а не поиск несуществующих методов в числах

Aleh
17.07.2017
09:53:01
Тайпчекер ругается иногда и там, где не смог разобраться, это нормальное поведение

Aleh
17.07.2017
09:53:26
Имеет смысл, если расширить прототип у Number.
Да не надо ничего расширять, валидный жс же

Adam
17.07.2017
09:53:37
Тайпчекер ругается иногда и там, где не смог разобраться, это нормальное поведение
мой тайпчекер правильно определил, что в массиве Number, какие тут могут быть проблемы?

Friedrich
17.07.2017
09:53:38
Валидный и имеющий смысл, если я расширю прототип.

Aleh
17.07.2017
09:53:40
Даже выполнится без ошибок

Friedrich
17.07.2017
09:53:45
Если не расширю — валидный, но не имеет смысла.

Google
Friedrich
17.07.2017
09:54:10
Ну, впрочем, да, это будет тупо [undefined, undefined, undefined], никаких проблем :)

Aleh
17.07.2017
09:54:24
Friedrich
17.07.2017
09:54:48
мой тайпчекер правильно определил, что в массиве Number, какие тут могут быть проблемы?
Проблема в том, что мы с тобой оба знаем, что есть библиотеки, которые расширяют прототипы объектов.

Многим это не нравится (сегодня уже большинству, пожалуй), но они есть.

Код, который написан для таких библиотек, не будет принят тайпчекером.

Friedrich
17.07.2017
09:55:24
Вот тебе один случай.

Adam
17.07.2017
09:55:28
Я в шоке, я завёл нормальную тему для обмена профессиональным опытом продвинутых пользователей, а ответ: «Я хочу писать [undefined, undefined, undefined]»

Aleh
17.07.2017
09:55:31
Т.е. надо просто объяснить тсу

Friedrich
17.07.2017
09:55:32
Adam
17.07.2017
09:56:43
Aleh
17.07.2017
09:57:56
Вот из реальных проблем - когда при noImplicitAny компилятор молча выставляет any там, где не поняь

Adam
17.07.2017
10:01:27
Вот из реальных проблем - когда при noImplicitAny компилятор молча выставляет any там, где не поняь
наведи на переменную, если у тебя нормальная IDE, а не высер от jetbrains

Дмитрий
17.07.2017
10:01:39
?

Aleh
17.07.2017
10:06:33
Даж не знаю, что и сказать

noImplicitAny подразумевает, что компилятор кинет ошибку

Сергей
17.07.2017
10:07:34
Вот из реальных проблем - когда при noImplicitAny компилятор молча выставляет any там, где не поняь
если noImplicitAny: true, то компилятор же как раз не проставляет any сам. Он ругается, что где-то может быть any — "Чувак, укажи тип!"

Aleh
17.07.2017
10:07:56
Из не багов, где он так не делает - ошибка в catch

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