From 6e8434fa885bdb7ef9fd0f09a8cd29c0e17cef5b Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 11 Mar 2019 21:01:28 +0800 Subject: Use strict check of typescript compiler. --- .../ClientApp/src/app/utilities/debounce-click.directive.spec.ts | 9 ++++----- Timeline/ClientApp/src/app/utilities/debounce-click.directive.ts | 6 ++++-- Timeline/ClientApp/src/app/utilities/language-untilities.ts | 9 +++++++++ 3 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 Timeline/ClientApp/src/app/utilities/language-untilities.ts (limited to 'Timeline/ClientApp/src/app/utilities') diff --git a/Timeline/ClientApp/src/app/utilities/debounce-click.directive.spec.ts b/Timeline/ClientApp/src/app/utilities/debounce-click.directive.spec.ts index 75710d0c..89f66b99 100644 --- a/Timeline/ClientApp/src/app/utilities/debounce-click.directive.spec.ts +++ b/Timeline/ClientApp/src/app/utilities/debounce-click.directive.spec.ts @@ -13,8 +13,8 @@ interface TestComponent { template: '' }) class DefaultDebounceTimeTestComponent { - @ViewChild(DebounceClickDirective) - directive: DebounceClickDirective; + + @ViewChild(DebounceClickDirective) directive!: DebounceClickDirective; clickHandler: () => void = () => { }; } @@ -24,10 +24,9 @@ class DefaultDebounceTimeTestComponent { template: '' }) class CustomDebounceTimeTestComponent { - debounceTime: number; + debounceTime: number | undefined; - @ViewChild(DebounceClickDirective) - directive: DebounceClickDirective; + @ViewChild(DebounceClickDirective) directive!: DebounceClickDirective; clickHandler: () => void = () => { }; } diff --git a/Timeline/ClientApp/src/app/utilities/debounce-click.directive.ts b/Timeline/ClientApp/src/app/utilities/debounce-click.directive.ts index feb0404e..1d01b671 100644 --- a/Timeline/ClientApp/src/app/utilities/debounce-click.directive.ts +++ b/Timeline/ClientApp/src/app/utilities/debounce-click.directive.ts @@ -7,7 +7,7 @@ import { debounceTime } from 'rxjs/operators'; }) export class DebounceClickDirective implements OnInit, OnDestroy { - private subscription: Subscription; + private subscription: Subscription | undefined; @Output('appDebounceClick') clickEvent = new EventEmitter(); @@ -34,6 +34,8 @@ export class DebounceClickDirective implements OnInit, OnDestroy { } ngOnDestroy() { - this.subscription.unsubscribe(); + if (this.subscription) { + this.subscription.unsubscribe(); + } } } diff --git a/Timeline/ClientApp/src/app/utilities/language-untilities.ts b/Timeline/ClientApp/src/app/utilities/language-untilities.ts new file mode 100644 index 00000000..f898039a --- /dev/null +++ b/Timeline/ClientApp/src/app/utilities/language-untilities.ts @@ -0,0 +1,9 @@ +export function nullIfUndefined(value: T | undefined): T | null { + return value === undefined ? null : value; +} + +export function throwIfFalsy(value: any, name: string = '') { + if (!value) { + throw new Error(name + ' is falsy.'); + } +} -- cgit v1.2.3 From 9a11e4f5081d6dff7f1587e636f39de4b8983753 Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 11 Mar 2019 21:21:02 +0800 Subject: Fix some compile bugs. --- .../src/app/todo/todo-item/todo-item.component.ts | 12 +++--------- .../user-login-success/user-login-success.component.ts | 14 ++++---------- .../ClientApp/src/app/utilities/language-untilities.ts | 9 ++++++--- 3 files changed, 13 insertions(+), 22 deletions(-) (limited to 'Timeline/ClientApp/src/app/utilities') diff --git a/Timeline/ClientApp/src/app/todo/todo-item/todo-item.component.ts b/Timeline/ClientApp/src/app/todo/todo-item/todo-item.component.ts index 50829769..b5c51229 100644 --- a/Timeline/ClientApp/src/app/todo/todo-item/todo-item.component.ts +++ b/Timeline/ClientApp/src/app/todo/todo-item/todo-item.component.ts @@ -1,18 +1,12 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { Component, Input } from '@angular/core'; import { TodoItem } from '../todo-item'; -import { throwIfFalsy } from 'src/app/utilities/language-untilities'; @Component({ selector: 'app-todo-item', templateUrl: './todo-item.component.html', styleUrls: ['./todo-item.component.css', '../todo-list-color-block.css'] }) -export class TodoItemComponent implements OnInit { - - @Input() item: TodoItem | undefined; - - ngOnInit() { - throwIfFalsy(this.item, 'item'); - } +export class TodoItemComponent { + @Input() item!: TodoItem; } diff --git a/Timeline/ClientApp/src/app/user/user-login-success/user-login-success.component.ts b/Timeline/ClientApp/src/app/user/user-login-success/user-login-success.component.ts index 1369d17d..22f6a41f 100644 --- a/Timeline/ClientApp/src/app/user/user-login-success/user-login-success.component.ts +++ b/Timeline/ClientApp/src/app/user/user-login-success/user-login-success.component.ts @@ -1,9 +1,9 @@ -import { Component, OnInit, Input } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { UserInfo } from '../entities'; import { InternalUserService } from '../internal-user-service/internal-user.service'; -import { throwIfFalsy } from 'src/app/utilities/language-untilities'; +import { throwIfNullOrUndefined } from 'src/app/utilities/language-untilities'; @Component({ selector: 'app-user-login-success', @@ -14,18 +14,12 @@ export class UserLoginSuccessComponent implements OnInit { displayLoginSuccessMessage = false; - userInfo: UserInfo | undefined; + userInfo!: UserInfo; constructor(private route: ActivatedRoute, private userService: InternalUserService) { } ngOnInit() { - const { currentUserInfo } = this.userService; - - if (!currentUserInfo) { - throw new Error('Route error. No login now!'); - } - - this.userInfo = this.userService.currentUserInfo!; + this.userInfo = throwIfNullOrUndefined(this.userService.currentUserInfo, () => 'Route error. No login now!'); this.displayLoginSuccessMessage = this.route.snapshot.paramMap.get('reason') === 'login'; } } diff --git a/Timeline/ClientApp/src/app/utilities/language-untilities.ts b/Timeline/ClientApp/src/app/utilities/language-untilities.ts index f898039a..be9df2dc 100644 --- a/Timeline/ClientApp/src/app/utilities/language-untilities.ts +++ b/Timeline/ClientApp/src/app/utilities/language-untilities.ts @@ -2,8 +2,11 @@ export function nullIfUndefined(value: T | undefined): T | null { return value === undefined ? null : value; } -export function throwIfFalsy(value: any, name: string = '') { - if (!value) { - throw new Error(name + ' is falsy.'); +export function throwIfNullOrUndefined(value: T | null | undefined, + lazyMessage: () => string = () => 'Value mustn\'t be falsy'): T | never { + if (value === null || value === undefined) { + throw new Error(lazyMessage()); + } else { + return value; } } -- cgit v1.2.3