Skip to content

Commit

Permalink
refactor(forms): use a type guard to get rid of casts (angular#32541)
Browse files Browse the repository at this point in the history
Use an explicit type guard when checking if a given object is of type AbstractControlOptions,
instead of a simple function returning a boolean value. This allows us to remove manual type
casting when using this function, relying instead on TypeScript to infer correct types.

PR Close angular#32541
  • Loading branch information
lazarljubenovic authored and atscott committed Jun 3, 2020
1 parent 382aa50 commit 06a8ad2
Showing 1 changed file with 5 additions and 12 deletions.
17 changes: 5 additions & 12 deletions packages/forms/src/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,7 @@ function _find(control: AbstractControl, path: Array<string|number>|string, deli

function coerceToValidator(validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|
null): ValidatorFn|null {
const validator =
(isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).validators :
validatorOrOpts) as ValidatorFn |
ValidatorFn[] | null;

const validator = isOptionsObj(validatorOrOpts) ? validatorOrOpts.validators : validatorOrOpts;
return Array.isArray(validator) ? composeValidators(validator) : validator || null;
}

Expand All @@ -84,10 +80,7 @@ function coerceToAsyncValidator(
validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null): AsyncValidatorFn|
null {
const origAsyncValidator =
(isOptionsObj(validatorOrOpts) ? (validatorOrOpts as AbstractControlOptions).asyncValidators :
asyncValidator) as AsyncValidatorFn |
AsyncValidatorFn | null;

isOptionsObj(validatorOrOpts) ? validatorOrOpts.asyncValidators : asyncValidator;
return Array.isArray(origAsyncValidator) ? composeAsyncValidators(origAsyncValidator) :
origAsyncValidator || null;
}
Expand Down Expand Up @@ -119,7 +112,7 @@ export interface AbstractControlOptions {


function isOptionsObj(validatorOrOpts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|
null): boolean {
null): validatorOrOpts is AbstractControlOptions {
return validatorOrOpts != null && !Array.isArray(validatorOrOpts) &&
typeof validatorOrOpts === 'object';
}
Expand Down Expand Up @@ -914,8 +907,8 @@ export abstract class AbstractControl {

/** @internal */
_setUpdateStrategy(opts?: ValidatorFn|ValidatorFn[]|AbstractControlOptions|null): void {
if (isOptionsObj(opts) && (opts as AbstractControlOptions).updateOn != null) {
this._updateOn = (opts as AbstractControlOptions).updateOn!;
if (isOptionsObj(opts) && opts.updateOn != null) {
this._updateOn = opts.updateOn!;
}
}

Expand Down

0 comments on commit 06a8ad2

Please sign in to comment.