mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-20 13:45:34 -05:00
Merge pull request #12312 from Microsoft/widen-literal-types-of-parameter-properties
Widen literal types of parameter properties
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user