
Adam
17.07.2017
09:13:07

Азиз
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
А зачем тут конструктор?

Азиз
17.07.2017
09:13:48

Adam
17.07.2017
09:13:58

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


Азиз
17.07.2017
09:15:04

Friedrich
17.07.2017
09:15:07
Конструктор был сгенерирован автоматически.
Ребята, не ругайтесь, а то модератора на вас натравлю.

Adam
17.07.2017
09:15:35

Google

Friedrich
17.07.2017
09:16:15

Азиз
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

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

Friedrich
17.07.2017
09:18:52
В объекте, полученном из JSON, полюбому не будет никаких твоих кастомных свойств и методов.
Используя преобразование типа, ты как бы говоришь "я знаю, что делаю, и гарантирую, что JSON.parse мне вернёт объект именно того класса, в который я кастую". Это утверждение у тебя ложно.
Поэтому ничего и не работает.
Я предлагаю тебе сделать конструктор с параметром, который будет принимать вот этот жисон из объекта.

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

Азиз
17.07.2017
09:20:37

Friedrich
17.07.2017
09:20:58

Adam
17.07.2017
09:21:42
тут недавно какие-то $values искали и недоумевали, почему же они такие сложные!
те темы, которые не поняли обозвали $values и начали спрашивать про несуществующие $values
мне почему-то кажется, что да. Хотя лень пробовать

Google

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

Adam
17.07.2017
09:27:57

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
(и, да, оно ломало совместимость, в этом и было намерение)

Азиз
17.07.2017
09:28:58

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

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

Adam
17.07.2017
09:40:12

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

Adam
17.07.2017
09:40:39

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

Aleh
17.07.2017
09:43:15

Adam
17.07.2017
09:43:20

Friedrich
17.07.2017
09:43:34

Max
17.07.2017
09:43:40

Aleh
17.07.2017
09:44:01

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 - так декларируется маркетологами. Но это не так - в нескольких случаях, как минимум

Aleh
17.07.2017
09:49:40

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

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

Friedrich
17.07.2017
09:53:10

Aleh
17.07.2017
09:53:26

Adam
17.07.2017
09:53:37

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
Многим это не нравится (сегодня уже большинству, пожалуй), но они есть.
Код, который написан для таких библиотек, не будет принят тайпчекером.

Aleh
17.07.2017
09:55:23

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

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

Aleh
17.07.2017
10:06:33
Даж не знаю, что и сказать
noImplicitAny подразумевает, что компилятор кинет ошибку

Сергей
17.07.2017
10:07:34

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