Skip to content

Commit

Permalink
fix(language-service): correctly type undefined
Browse files Browse the repository at this point in the history
fixes #13412
closes #13414
  • Loading branch information
chuckjaz authored and vicb committed Dec 15, 2016
1 parent 4544b1d commit 0a7364f
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions modules/@angular/language-service/src/expressions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -201,22 +201,25 @@ class AstType implements ExpressionVisitor {

visitBinary(ast: Binary): Symbol {
// Treat undefined and null as other.
function normalize(kind: BuiltinType): BuiltinType {
function normalize(kind: BuiltinType, other: BuiltinType): BuiltinType {
switch (kind) {
case BuiltinType.Undefined:
case BuiltinType.Null:
return BuiltinType.Other;
return normalize(other, BuiltinType.Other);
}
return kind;
}

const leftType = this.getType(ast.left);
const rightType = this.getType(ast.right);
const leftKind = normalize(this.query.getTypeKind(leftType));
const rightKind = normalize(this.query.getTypeKind(rightType));
const leftRawKind = this.query.getTypeKind(leftType);
const rightRawKind = this.query.getTypeKind(rightType);
const leftKind = normalize(leftRawKind, rightRawKind);
const rightKind = normalize(rightRawKind, leftRawKind);

// The following swtich implements operator typing similar to the
// type production tables in the TypeScript specification.
// https://github.com/Microsoft/TypeScript/blob/v1.8.10/doc/spec.md#4.19
const operKind = leftKind << 8 | rightKind;
switch (ast.operation) {
case '*':
Expand Down Expand Up @@ -403,6 +406,8 @@ class AstType implements ExpressionVisitor {
return this.query.getBuiltinType(BuiltinType.Boolean);
case null:
return this.query.getBuiltinType(BuiltinType.Null);
case undefined:
return this.query.getBuiltinType(BuiltinType.Undefined);
default:
switch (typeof ast.value) {
case 'string':
Expand Down

0 comments on commit 0a7364f

Please sign in to comment.