diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 58717c941d932..9cad117c57636 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -26185,6 +26185,8 @@ namespace ts { function isPropertyInitializedInConstructor(propName: Identifier, propType: Type, constructor: ConstructorDeclaration) { const reference = createPropertyAccess(createThis(), propName); + reference.expression.parent = reference; + reference.parent = constructor; reference.flowNode = constructor.returnFlowNode; const flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType)); return !(getFalsyFlags(flowType) & TypeFlags.Undefined); diff --git a/tests/baselines/reference/strictBooleanMemberAssignability.js b/tests/baselines/reference/strictBooleanMemberAssignability.js new file mode 100644 index 0000000000000..c19fc0b33c916 --- /dev/null +++ b/tests/baselines/reference/strictBooleanMemberAssignability.js @@ -0,0 +1,16 @@ +//// [strictBooleanMemberAssignability.ts] +class Abc { + def: boolean + constructor() { + this.def = true + } +} + +//// [strictBooleanMemberAssignability.js] +"use strict"; +var Abc = /** @class */ (function () { + function Abc() { + this.def = true; + } + return Abc; +}()); diff --git a/tests/baselines/reference/strictBooleanMemberAssignability.symbols b/tests/baselines/reference/strictBooleanMemberAssignability.symbols new file mode 100644 index 0000000000000..b9c449f605165 --- /dev/null +++ b/tests/baselines/reference/strictBooleanMemberAssignability.symbols @@ -0,0 +1,14 @@ +=== tests/cases/compiler/strictBooleanMemberAssignability.ts === +class Abc { +>Abc : Symbol(Abc, Decl(strictBooleanMemberAssignability.ts, 0, 0)) + + def: boolean +>def : Symbol(Abc.def, Decl(strictBooleanMemberAssignability.ts, 0, 11)) + + constructor() { + this.def = true +>this.def : Symbol(Abc.def, Decl(strictBooleanMemberAssignability.ts, 0, 11)) +>this : Symbol(Abc, Decl(strictBooleanMemberAssignability.ts, 0, 0)) +>def : Symbol(Abc.def, Decl(strictBooleanMemberAssignability.ts, 0, 11)) + } +} diff --git a/tests/baselines/reference/strictBooleanMemberAssignability.types b/tests/baselines/reference/strictBooleanMemberAssignability.types new file mode 100644 index 0000000000000..694f44f269542 --- /dev/null +++ b/tests/baselines/reference/strictBooleanMemberAssignability.types @@ -0,0 +1,16 @@ +=== tests/cases/compiler/strictBooleanMemberAssignability.ts === +class Abc { +>Abc : Abc + + def: boolean +>def : boolean + + constructor() { + this.def = true +>this.def = true : true +>this.def : boolean +>this : this +>def : boolean +>true : true + } +} diff --git a/tests/cases/compiler/strictBooleanMemberAssignability.ts b/tests/cases/compiler/strictBooleanMemberAssignability.ts new file mode 100644 index 0000000000000..8b723c1de1012 --- /dev/null +++ b/tests/cases/compiler/strictBooleanMemberAssignability.ts @@ -0,0 +1,7 @@ +// @strict: true +class Abc { + def: boolean + constructor() { + this.def = true + } +} \ No newline at end of file