Skip to content

Commit f5134a5

Browse files
committed
Per-file strictNullChecks support
1 parent 913e68b commit f5134a5

29 files changed

+729
-436
lines changed

src/compiler/checker.ts

Lines changed: 378 additions & 263 deletions
Large diffs are not rendered by default.

src/compiler/types.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4576,9 +4576,9 @@ namespace ts {
45764576
/* @internal */ getParameterType(signature: Signature, parameterIndex: number): Type;
45774577
/* @internal */ getParameterIdentifierNameAtPosition(signature: Signature, parameterIndex: number): [parameterName: __String, isRestParameter: boolean] | undefined;
45784578
getNullableType(type: Type, flags: TypeFlags): Type;
4579-
getNonNullableType(type: Type): Type;
4579+
getNonNullableType(type: Type, context?: Node | undefined): Type;
45804580
/* @internal */ getNonOptionalType(type: Type): Type;
4581-
/* @internal */ isNullableType(type: Type): boolean;
4581+
/* @internal */ isNullableType(type: Type, context?: Node | undefined): boolean;
45824582
getTypeArguments(type: TypeReference): readonly Type[];
45834583

45844584
// TODO: GH#18217 `xToDeclaration` calls are frequently asserted as defined.
@@ -4710,8 +4710,8 @@ namespace ts {
47104710
/* @internal */ getFalseType(fresh?: boolean): Type;
47114711
/* @internal */ getTrueType(fresh?: boolean): Type;
47124712
/* @internal */ getVoidType(): Type;
4713-
/* @internal */ getUndefinedType(): Type;
4714-
/* @internal */ getNullType(): Type;
4713+
/* @internal */ getUndefinedType(widening?: boolean): Type;
4714+
/* @internal */ getNullType(widening?: boolean): Type;
47154715
/* @internal */ getESSymbolType(): Type;
47164716
/* @internal */ getNeverType(): Type;
47174717
/* @internal */ getOptionalType(): Type;
@@ -5606,12 +5606,12 @@ namespace ts {
56065606
Narrowable = Any | Unknown | StructuredOrInstantiable | StringLike | NumberLike | BigIntLike | BooleanLike | ESSymbol | UniqueESSymbol | NonPrimitive,
56075607
// The following flags are aggregated during union and intersection type construction
56085608
/* @internal */
5609-
IncludesMask = Any | Unknown | Primitive | Never | Object | Union | Intersection | NonPrimitive | TemplateLiteral,
5609+
IncludesMask = Any | Unknown | Primitive | Never | Object | Union | Intersection | NonPrimitive | TemplateLiteral | Index | StringMapping,
56105610
// The following flags are used for different purposes during union and intersection type construction
56115611
/* @internal */
56125612
IncludesMissingType = TypeParameter,
56135613
/* @internal */
5614-
IncludesNonWideningType = Index,
5614+
IncludesNonWideningType = 1 << 29, // repurpose for true typeflag when needed
56155615
/* @internal */
56165616
IncludesWildcard = IndexedAccess,
56175617
/* @internal */

src/services/codefixes/inferFromUsage.ts

Lines changed: 68 additions & 24 deletions
Large diffs are not rendered by default.

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2323,7 +2323,7 @@ declare namespace ts {
23232323
getWidenedType(type: Type): Type;
23242324
getReturnTypeOfSignature(signature: Signature): Type;
23252325
getNullableType(type: Type, flags: TypeFlags): Type;
2326-
getNonNullableType(type: Type): Type;
2326+
getNonNullableType(type: Type, context?: Node | undefined): Type;
23272327
getTypeArguments(type: TypeReference): readonly Type[];
23282328
/** Note that the resulting nodes cannot be checked. */
23292329
typeToTypeNode(type: Type, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): TypeNode | undefined;

tests/baselines/reference/api/typescript.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2323,7 +2323,7 @@ declare namespace ts {
23232323
getWidenedType(type: Type): Type;
23242324
getReturnTypeOfSignature(signature: Signature): Type;
23252325
getNullableType(type: Type, flags: TypeFlags): Type;
2326-
getNonNullableType(type: Type): Type;
2326+
getNonNullableType(type: Type, context?: Node | undefined): Type;
23272327
getTypeArguments(type: TypeReference): readonly Type[];
23282328
/** Note that the resulting nodes cannot be checked. */
23292329
typeToTypeNode(type: Type, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): TypeNode | undefined;

tests/baselines/reference/circularlyConstrainedMappedTypeContainingConditionalNoInfiniteInstantiationDepth.errors.txt

Lines changed: 104 additions & 42 deletions
Large diffs are not rendered by default.

tests/baselines/reference/collectionPatternNoError.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ function fetchMsg<V extends Message>(protoCtor: MsgConstructor<V>): V {
2323
>protoCtor : MsgConstructor<V>
2424

2525
return null!;
26-
>null! : null
26+
>null! : never
2727
>null : null
2828
}
2929

tests/baselines/reference/conditionalTypes2.errors.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,6 @@ tests/cases/conformance/types/conditional/conditionalTypes2.ts(75,12): error TS2
148148
!!! error TS2345: Property 'bat' is missing in type 'Bar & Foo' but required in type '{ foo: string; bat: string; }'.
149149
!!! error TS2345: Type 'Extract<T, Bar>' is not assignable to type '{ foo: string; bat: string; }'.
150150
!!! error TS2345: Property 'bat' is missing in type 'Bar & Foo' but required in type '{ foo: string; bat: string; }'.
151-
!!! related TS2728 tests/cases/conformance/types/conditional/conditionalTypes2.ts:62:43: 'bat' is declared here.
152151
!!! related TS2728 tests/cases/conformance/types/conditional/conditionalTypes2.ts:62:43: 'bat' is declared here.
153152
fooBat(y); // Error
154153
~

tests/baselines/reference/declarationEmitMappedTypeDistributivityPreservesConstraints.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ function fn<T extends { x: Map<T['x']> }>(sliceIndex: T): AllArg<T['x']> {
1515
>sliceIndex : T
1616

1717
return null!;
18-
>null! : null
18+
>null! : never
1919
>null : null
2020
}
2121

tests/baselines/reference/emitDecoratorMetadata_isolatedModules(module=commonjs).types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class HelloWorld {
8080
handleEvent3(event: C3): T1 { return undefined! } // Ok, Error
8181
>handleEvent3 : (event: C3) => T1
8282
>event : C3
83-
>undefined! : undefined
83+
>undefined! : never
8484
>undefined : undefined
8585
}
8686

0 commit comments

Comments
 (0)