Skip to content

Commit 62119ec

Browse files
committed
@typescript-eslint/no-unnecessary-type-assertion
1 parent 5ce8c83 commit 62119ec

16 files changed

Lines changed: 44 additions & 42 deletions

File tree

.eslintrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"@typescript-eslint/no-this-alias": "error",
3939
"@typescript-eslint/no-triple-slash-reference": "off",
4040
"@typescript-eslint/no-unnecessary-qualifier": "error",
41-
"@typescript-eslint/no-unnecessary-type-assertion": "off",
41+
"@typescript-eslint/no-unnecessary-type-assertion": "error",
4242
"@typescript-eslint/no-use-before-define": "off",
4343
"@typescript-eslint/no-var-requires": "off",
4444
"@typescript-eslint/prefer-for-of": "error",

scripts/buildProtocol.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class DeclarationsWalker {
3030
text += "\ndeclare namespace ts {\n";
3131
text += " // these types are empty stubs for types from services and should not be used directly\n";
3232
for (const type of walker.removedTypes) {
33-
text += ` export type ${type.symbol!.name} = never;\n`;
33+
text += ` export type ${type.symbol.name} = never;\n`;
3434
}
3535
text += "}";
3636
}

src/compiler/checker.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4093,7 +4093,7 @@ namespace ts {
40934093
let typeParameters: TypeParameterDeclaration[] | undefined;
40944094
let typeArguments: TypeNode[] | undefined;
40954095
if (context.flags & NodeBuilderFlags.WriteTypeArgumentsOfSignature && signature.target && signature.mapper && signature.target.typeParameters) {
4096-
typeArguments = signature.target.typeParameters.map(parameter => typeToTypeNodeHelper(instantiateType(parameter, signature.mapper!), context));
4096+
typeArguments = signature.target.typeParameters.map(parameter => typeToTypeNodeHelper(instantiateType(parameter, signature.mapper), context));
40974097
}
40984098
else {
40994099
typeParameters = signature.typeParameters && signature.typeParameters.map(parameter => typeParameterToDeclaration(parameter, context));
@@ -5893,7 +5893,7 @@ namespace ts {
58935893
if (!pushTypeResolution(symbol, TypeSystemPropertyName.Type)) {
58945894
return links.type = errorType;
58955895
}
5896-
let type = instantiateType(getTypeOfSymbol(links.target!), links.mapper!);
5896+
let type = instantiateType(getTypeOfSymbol(links.target!), links.mapper);
58975897
if (!popTypeResolution()) {
58985898
type = reportCircularityError(symbol);
58995899
}
@@ -7006,7 +7006,7 @@ namespace ts {
70067006
const minTypeArgumentCount = getMinTypeArgumentCount(baseSig.typeParameters);
70077007
const typeParamCount = length(baseSig.typeParameters);
70087008
if (isJavaScript || typeArgCount >= minTypeArgumentCount && typeArgCount <= typeParamCount) {
7009-
const sig = typeParamCount ? createSignatureInstantiation(baseSig, fillMissingTypeArguments(typeArguments, baseSig.typeParameters, minTypeArgumentCount, isJavaScript)!) : cloneSignature(baseSig);
7009+
const sig = typeParamCount ? createSignatureInstantiation(baseSig, fillMissingTypeArguments(typeArguments, baseSig.typeParameters, minTypeArgumentCount, isJavaScript)) : cloneSignature(baseSig);
70107010
sig.typeParameters = classType.localTypeParameters;
70117011
sig.resolvedReturnType = classType;
70127012
result.push(sig);
@@ -7903,7 +7903,7 @@ namespace ts {
79037903
if (!typeParameter.default) {
79047904
if (typeParameter.target) {
79057905
const targetDefault = getResolvedTypeParameterDefault(typeParameter.target);
7906-
typeParameter.default = targetDefault ? instantiateType(targetDefault, typeParameter.mapper!) : noConstraintType;
7906+
typeParameter.default = targetDefault ? instantiateType(targetDefault, typeParameter.mapper) : noConstraintType;
79077907
}
79087908
else {
79097909
// To block recursion, set the initial value to the resolvingDefaultType.
@@ -8563,7 +8563,7 @@ namespace ts {
85638563
if (!pushTypeResolution(signature, TypeSystemPropertyName.ResolvedReturnType)) {
85648564
return errorType;
85658565
}
8566-
let type = signature.target ? instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper!) :
8566+
let type = signature.target ? instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper) :
85678567
signature.unionSignatures ? getUnionType(map(signature.unionSignatures, getReturnTypeOfSignature), UnionReduction.Subtype) :
85688568
getReturnTypeFromAnnotation(signature.declaration!) ||
85698569
isJSConstructor(signature.declaration) && getJSClassType(getSymbolOfNode(signature.declaration!)) ||
@@ -8815,7 +8815,7 @@ namespace ts {
88158815
if (!typeParameter.constraint) {
88168816
if (typeParameter.target) {
88178817
const targetConstraint = getConstraintOfTypeParameter(typeParameter.target);
8818-
typeParameter.constraint = targetConstraint ? instantiateType(targetConstraint, typeParameter.mapper!) : noConstraintType;
8818+
typeParameter.constraint = targetConstraint ? instantiateType(targetConstraint, typeParameter.mapper) : noConstraintType;
88198819
}
88208820
else {
88218821
const constraintDeclaration = getConstraintDeclaration(typeParameter);
@@ -11175,7 +11175,7 @@ namespace ts {
1117511175
// type mappers. This ensures that original type identities are properly preserved and that aliases
1117611176
// always reference a non-aliases.
1117711177
symbol = links.target!;
11178-
mapper = combineTypeMappers(links.mapper!, mapper);
11178+
mapper = combineTypeMappers(links.mapper, mapper);
1117911179
}
1118011180
// Keep the flags from the symbol we're instantiating. Mark that is instantiated, and
1118111181
// also transient so that we can just store data on it directly.
@@ -11232,7 +11232,7 @@ namespace ts {
1123211232
// We are instantiating an anonymous type that has one or more type parameters in scope. Apply the
1123311233
// mapper to the type parameters to produce the effective list of type arguments, and compute the
1123411234
// instantiation cache key from the type IDs of the type arguments.
11235-
const combinedMapper = type.objectFlags & ObjectFlags.Instantiated ? combineTypeMappers(type.mapper!, mapper) : mapper;
11235+
const combinedMapper = type.objectFlags & ObjectFlags.Instantiated ? combineTypeMappers(type.mapper, mapper) : mapper;
1123611236
const typeArguments: Type[] = map(typeParameters, combinedMapper);
1123711237
const id = getTypeListId(typeArguments);
1123811238
let result = links.instantiations!.get(id);
@@ -18951,7 +18951,7 @@ namespace ts {
1895118951
return createTypeReference((declaredManagedType as GenericType), args);
1895218952
}
1895318953
else if (length(declaredManagedType.aliasTypeArguments) >= 2) {
18954-
const args = fillMissingTypeArguments([ctorType, attributesType], declaredManagedType.aliasTypeArguments!, 2, isInJSFile(context));
18954+
const args = fillMissingTypeArguments([ctorType, attributesType], declaredManagedType.aliasTypeArguments, 2, isInJSFile(context));
1895518955
return getTypeAliasInstantiation(declaredManagedType.aliasSymbol!, args);
1895618956
}
1895718957
}
@@ -25194,7 +25194,7 @@ namespace ts {
2519425194
}
2519525195
result = result && checkTypeAssignableTo(
2519625196
typeArguments[i],
25197-
instantiateType(constraint, mapper!),
25197+
instantiateType(constraint, mapper),
2519825198
node.typeArguments![i],
2519925199
Diagnostics.Type_0_does_not_satisfy_the_constraint_1);
2520025200
}
@@ -25486,7 +25486,7 @@ namespace ts {
2548625486
return;
2548725487
}
2548825488
else if (nodeIsPresent((<FunctionLikeDeclaration>subsequentNode).body)) {
25489-
error(errorNode, Diagnostics.Function_implementation_name_must_be_0, declarationNameToString(node.name!));
25489+
error(errorNode, Diagnostics.Function_implementation_name_must_be_0, declarationNameToString(node.name));
2549025490
return;
2549125491
}
2549225492
}

src/compiler/emitter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2661,7 +2661,7 @@ namespace ts {
26612661
writeKeyword("function");
26622662
emit(node.asteriskToken);
26632663
writeSpace();
2664-
emitIdentifierName(node.name!); // TODO: GH#18217
2664+
emitIdentifierName(node.name); // TODO: GH#18217
26652665
emitSignatureAndBody(node, emitSignatureHead);
26662666
}
26672667

@@ -3490,7 +3490,7 @@ namespace ts {
34903490
if (shouldEmitPrologueDirective) {
34913491
if (needsToSetSourceFile) {
34923492
needsToSetSourceFile = false;
3493-
setSourceFile(sourceFile!);
3493+
setSourceFile(sourceFile);
34943494
}
34953495
writeLine();
34963496
const pos = writer.getTextPos();

src/compiler/transformers/generators.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -936,7 +936,7 @@ namespace ts {
936936
// x = %sent%;
937937

938938
const resumeLabel = defineLabel();
939-
const expression = visitNode(node.expression!, visitor, isExpression);
939+
const expression = visitNode(node.expression, visitor, isExpression);
940940
if (node.asteriskToken) {
941941
const iterator = (getEmitFlags(node.expression!) & EmitFlags.Iterator) === 0
942942
? createValuesHelper(context, expression, /*location*/ node)
@@ -1262,7 +1262,7 @@ namespace ts {
12621262
while (variablesWritten < numVariables) {
12631263
for (let i = variablesWritten; i < numVariables; i++) {
12641264
const variable = variables[i];
1265-
if (containsYield(variable.initializer!) && pendingExpressions.length > 0) {
1265+
if (containsYield(variable.initializer) && pendingExpressions.length > 0) {
12661266
break;
12671267
}
12681268

@@ -1283,7 +1283,7 @@ namespace ts {
12831283
return setSourceMapRange(
12841284
createAssignment(
12851285
setSourceMapRange(<Identifier>getSynthesizedClone(node.name), node.name),
1286-
visitNode(node.initializer!, visitor, isExpression)
1286+
visitNode(node.initializer, visitor, isExpression)
12871287
),
12881288
node
12891289
);
@@ -1868,7 +1868,7 @@ namespace ts {
18681868

18691869
function transformAndEmitThrowStatement(node: ThrowStatement): void {
18701870
emitThrow(
1871-
visitNode(node.expression!, visitor, isExpression),
1871+
visitNode(node.expression, visitor, isExpression),
18721872
/*location*/ node
18731873
);
18741874
}

src/compiler/transformers/module/system.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,7 @@ namespace ts {
621621
if (hasAssociatedEndOfDeclarationMarker(node)) {
622622
// Defer exports until we encounter an EndOfDeclarationMarker node
623623
const id = getOriginalNodeId(node);
624-
deferredExports[id] = appendExportsOfImportEqualsDeclaration(deferredExports[id]!, node);
624+
deferredExports[id] = appendExportsOfImportEqualsDeclaration(deferredExports[id], node);
625625
}
626626
else {
627627
statements = appendExportsOfImportEqualsDeclaration(statements, node);

src/compiler/transformers/ts.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1271,7 +1271,7 @@ namespace ts {
12711271
const propertyName = isComputedPropertyName(property.name) && !isSimpleInlineableExpression(property.name.expression)
12721272
? updateComputedPropertyName(property.name, getGeneratedNameForNode(property.name))
12731273
: property.name;
1274-
const initializer = visitNode(property.initializer!, visitor, isExpression);
1274+
const initializer = visitNode(property.initializer, visitor, isExpression);
12751275
const memberAccess = createMemberAccessForPropertyName(receiver, propertyName, /*location*/ propertyName);
12761276

12771277
return createAssignment(memberAccess, initializer);
@@ -2477,7 +2477,7 @@ namespace ts {
24772477
return setTextRange(
24782478
createAssignment(
24792479
getNamespaceMemberNameWithSourceMapsAndWithoutComments(name),
2480-
visitNode(node.initializer!, visitor, isExpression)
2480+
visitNode(node.initializer, visitor, isExpression)
24812481
),
24822482
/*location*/ node
24832483
);

src/compiler/utilities.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2201,13 +2201,13 @@ namespace ts {
22012201
let result: (JSDoc | JSDocTag)[] | undefined;
22022202
// Pull parameter comments from declaring function as well
22032203
if (isVariableLike(hostNode) && hasInitializer(hostNode) && hasJSDocNodes(hostNode.initializer!)) {
2204-
result = addRange(result, (hostNode.initializer as HasJSDoc).jsDoc!);
2204+
result = addRange(result, (hostNode.initializer as HasJSDoc).jsDoc);
22052205
}
22062206

22072207
let node: Node | undefined = hostNode;
22082208
while (node && node.parent) {
22092209
if (hasJSDocNodes(node)) {
2210-
result = addRange(result, node.jsDoc!);
2210+
result = addRange(result, node.jsDoc);
22112211
}
22122212

22132213
if (node.kind === SyntaxKind.Parameter) {

src/compiler/visitor.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ namespace ts {
334334
nodesVisitor((<IndexSignatureDeclaration>node).decorators, visitor, isDecorator),
335335
nodesVisitor((<IndexSignatureDeclaration>node).modifiers, visitor, isModifier),
336336
nodesVisitor((<IndexSignatureDeclaration>node).parameters, visitor, isParameterDeclaration),
337-
visitNode((<IndexSignatureDeclaration>node).type!, visitor, isTypeNode));
337+
visitNode((<IndexSignatureDeclaration>node).type, visitor, isTypeNode));
338338

339339
// Types
340340

@@ -564,7 +564,7 @@ namespace ts {
564564
case SyntaxKind.YieldExpression:
565565
return updateYield(<YieldExpression>node,
566566
visitNode((<YieldExpression>node).asteriskToken, tokenVisitor, isToken),
567-
visitNode((<YieldExpression>node).expression!, visitor, isExpression));
567+
visitNode((<YieldExpression>node).expression, visitor, isExpression));
568568

569569
case SyntaxKind.SpreadElement:
570570
return updateSpread(<SpreadElement>node,
@@ -683,7 +683,7 @@ namespace ts {
683683

684684
case SyntaxKind.ThrowStatement:
685685
return updateThrow(<ThrowStatement>node,
686-
visitNode((<ThrowStatement>node).expression!, visitor, isExpression));
686+
visitNode((<ThrowStatement>node).expression, visitor, isExpression));
687687

688688
case SyntaxKind.TryStatement:
689689
return updateTry(<TryStatement>node,
@@ -857,7 +857,7 @@ namespace ts {
857857
case SyntaxKind.JsxAttribute:
858858
return updateJsxAttribute(<JsxAttribute>node,
859859
visitNode((<JsxAttribute>node).name, visitor, isIdentifier),
860-
visitNode((<JsxAttribute>node).initializer!, visitor, isStringLiteralOrJsxExpression));
860+
visitNode((<JsxAttribute>node).initializer, visitor, isStringLiteralOrJsxExpression));
861861

862862
case SyntaxKind.JsxAttributes:
863863
return updateJsxAttributes(<JsxAttributes>node,

src/harness/harness.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -833,7 +833,7 @@ namespace Harness {
833833
setCompilerOptionsFromHarnessSetting(harnessSettings, options);
834834
}
835835
if (options.rootDirs) {
836-
options.rootDirs = ts.map(options.rootDirs, d => ts.getNormalizedAbsolutePath(d, currentDirectory!));
836+
options.rootDirs = ts.map(options.rootDirs, d => ts.getNormalizedAbsolutePath(d, currentDirectory));
837837
}
838838

839839
const useCaseSensitiveFileNames = options.useCaseSensitiveFileNames !== undefined ? options.useCaseSensitiveFileNames : true;

0 commit comments

Comments
 (0)