@@ -13121,8 +13121,10 @@ namespace ts {
1312113121 // the entire control flow graph from the variable's declaration (i.e. when the flow container and
1312213122 // declaration container are the same).
1312313123 const assumeInitialized = isParameter || isAlias || isOuterVariable ||
13124- type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & TypeFlags.Any) !== 0 || isInTypeQuery(node) || node.parent.kind === SyntaxKind.ExportSpecifier) ||
13124+ type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & TypeFlags.Any) !== 0 ||
13125+ isInTypeQuery(node) || node.parent.kind === SyntaxKind.ExportSpecifier) ||
1312513126 node.parent.kind === SyntaxKind.NonNullExpression ||
13127+ declaration.kind === SyntaxKind.VariableDeclaration && (<VariableDeclaration>declaration).exclamationToken ||
1312613128 declaration.flags & NodeFlags.Ambient;
1312713129 const initialType = assumeInitialized ? (isParameter ? removeOptionalityFromDeclaredType(type, getRootDeclaration(declaration) as VariableLikeDeclaration) : type) :
1312813130 type === autoType || type === autoArrayType ? undefinedType :
@@ -22669,6 +22671,7 @@ namespace ts {
2266922671 function isInstancePropertyWithoutInitializer(node: Node) {
2267022672 return node.kind === SyntaxKind.PropertyDeclaration &&
2267122673 !hasModifier(node, ModifierFlags.Static | ModifierFlags.Abstract) &&
22674+ !(<PropertyDeclaration>node).exclamationToken &&
2267222675 !(<PropertyDeclaration>node).initializer;
2267322676 }
2267422677
@@ -26101,6 +26104,10 @@ namespace ts {
2610126104 }
2610226105 }
2610326106
26107+ if (node.exclamationToken && (node.parent.parent.kind !== SyntaxKind.VariableStatement || !node.type || node.initializer || node.flags & NodeFlags.Ambient)) {
26108+ return grammarErrorOnNode(node.exclamationToken, Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context);
26109+ }
26110+
2610426111 if (compilerOptions.module !== ModuleKind.ES2015 && compilerOptions.module !== ModuleKind.ESNext && compilerOptions.module !== ModuleKind.System && !compilerOptions.noEmit &&
2610526112 !(node.parent.parent.flags & NodeFlags.Ambient) && hasModifier(node.parent.parent, ModifierFlags.Export)) {
2610626113 checkESModuleMarker(node.name);
@@ -26264,6 +26271,11 @@ namespace ts {
2626426271 if (node.flags & NodeFlags.Ambient && node.initializer) {
2626526272 return grammarErrorOnFirstToken(node.initializer, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);
2626626273 }
26274+
26275+ if (node.exclamationToken && (!isClassLike(node.parent) || !node.type || node.initializer ||
26276+ node.flags & NodeFlags.Ambient || hasModifier(node, ModifierFlags.Static | ModifierFlags.Abstract))) {
26277+ return grammarErrorOnNode(node.exclamationToken, Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context);
26278+ }
2626726279 }
2626826280
2626926281 function checkGrammarTopLevelElementForRequiredDeclareModifier(node: Node): boolean {
0 commit comments