Skip to content

Commit

Permalink
Merge pull request #12312 from Microsoft/widen-literal-types-of-param…
Browse files Browse the repository at this point in the history
…eter-properties

Widen literal types of parameter properties
  • Loading branch information
sandersn authored Nov 16, 2016
2 parents 6f409b5 + 5dbe5f4 commit 0b0b68e
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14744,7 +14744,7 @@ namespace ts {
function checkDeclarationInitializer(declaration: VariableLikeDeclaration) {
const type = checkExpressionCached(declaration.initializer);
return getCombinedNodeFlags(declaration) & NodeFlags.Const ||
getCombinedModifierFlags(declaration) & ModifierFlags.Readonly ||
getCombinedModifierFlags(declaration) & ModifierFlags.Readonly && !isParameterPropertyDeclaration(declaration) ||
isTypeAssertion(declaration.initializer) ? type : getWidenedLiteralType(type);
}

Expand Down
2 changes: 1 addition & 1 deletion src/compiler/utilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4497,7 +4497,7 @@ namespace ts {
}
}

export function isParameterPropertyDeclaration(node: ParameterDeclaration): boolean {
export function isParameterPropertyDeclaration(node: Node): boolean {
return hasModifier(node, ModifierFlags.ParameterPropertyModifier) && node.parent.kind === SyntaxKind.Constructor && isClassLike(node.parent.parent);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
tests/cases/conformance/types/literal/literalTypesWidenInParameterPosition.ts(4,9): error TS2322: Type '5' is not assignable to type '1'.


==== tests/cases/conformance/types/literal/literalTypesWidenInParameterPosition.ts (1 errors) ====
class D {
readonly noWiden = 1
constructor(readonly widen = 2) {
this.noWiden = 5; // error
~~~~~~~~~~~~
!!! error TS2322: Type '5' is not assignable to type '1'.
this.widen = 6; // ok
}
}
new D(7); // ok

23 changes: 23 additions & 0 deletions tests/baselines/reference/literalTypesWidenInParameterPosition.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//// [literalTypesWidenInParameterPosition.ts]
class D {
readonly noWiden = 1
constructor(readonly widen = 2) {
this.noWiden = 5; // error
this.widen = 6; // ok
}
}
new D(7); // ok


//// [literalTypesWidenInParameterPosition.js]
var D = (function () {
function D(widen) {
if (widen === void 0) { widen = 2; }
this.widen = widen;
this.noWiden = 1;
this.noWiden = 5; // error
this.widen = 6; // ok
}
return D;
}());
new D(7); // ok
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class D {
readonly noWiden = 1
constructor(readonly widen = 2) {
this.noWiden = 5; // error
this.widen = 6; // ok
}
}
new D(7); // ok

0 comments on commit 0b0b68e

Please sign in to comment.