🤖 Pick PR #60393 (Don't try to add an implicit undefi...) into release-5.7 (#60825)

Co-authored-by: Mateusz Burzyński <mateuszburzynski@gmail.com>
This commit is contained in:
TypeScript Bot 2024-12-19 14:28:07 -08:00 committed by GitHub
parent 9df7c36aa9
commit 7aa63df74c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 721 additions and 1 deletions

View File

@ -6249,7 +6249,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
return true;
}
if (requiresAddingUndefined && annotationType) {
annotationType = getOptionalType(annotationType, !isParameter(node));
annotationType = addOptionality(annotationType, !isParameter(node));
}
return !!annotationType && typeNodeIsEquivalentToType(node, type, annotationType) && existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(existing, type);
},

View File

@ -0,0 +1,48 @@
//// [tests/cases/compiler/declarationEmitOptionalMappedTypePropertyNoStrictNullChecks1.ts] ////
//// [createApi.ts]
type Id<T> = {
[K in keyof T]: T[K];
} & {};
export declare function createApi<Definitions>(_: { endpoints: Definitions }): {
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
status: "uninitialized";
originalArgs?: undefined;
}>;
};
//// [index.ts]
import { createApi } from "./createApi";
const slice = createApi({
endpoints: {
test: {
url: `/user`,
},
},
});
export const { useTestQuery } = slice;
//// [createApi.d.ts]
type Id<T> = {
[K in keyof T]: T[K];
} & {};
export declare function createApi<Definitions>(_: {
endpoints: Definitions;
}): {
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
status: "uninitialized";
originalArgs?: undefined;
}>;
};
export {};
//// [index.d.ts]
export declare const useTestQuery: () => {
status: "uninitialized";
originalArgs?: undefined;
};

View File

@ -0,0 +1,63 @@
//// [tests/cases/compiler/declarationEmitOptionalMappedTypePropertyNoStrictNullChecks1.ts] ////
=== createApi.ts ===
type Id<T> = {
>Id : Symbol(Id, Decl(createApi.ts, 0, 0))
>T : Symbol(T, Decl(createApi.ts, 0, 8))
[K in keyof T]: T[K];
>K : Symbol(K, Decl(createApi.ts, 1, 3))
>T : Symbol(T, Decl(createApi.ts, 0, 8))
>T : Symbol(T, Decl(createApi.ts, 0, 8))
>K : Symbol(K, Decl(createApi.ts, 1, 3))
} & {};
export declare function createApi<Definitions>(_: { endpoints: Definitions }): {
>createApi : Symbol(createApi, Decl(createApi.ts, 2, 7))
>Definitions : Symbol(Definitions, Decl(createApi.ts, 4, 34))
>_ : Symbol(_, Decl(createApi.ts, 4, 47))
>endpoints : Symbol(endpoints, Decl(createApi.ts, 4, 51))
>Definitions : Symbol(Definitions, Decl(createApi.ts, 4, 34))
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
>K : Symbol(K, Decl(createApi.ts, 5, 3))
>Definitions : Symbol(Definitions, Decl(createApi.ts, 4, 34))
>Capitalize : Symbol(Capitalize, Decl(lib.es5.d.ts, --, --))
>K : Symbol(K, Decl(createApi.ts, 5, 3))
>Id : Symbol(Id, Decl(createApi.ts, 0, 0))
status: "uninitialized";
>status : Symbol(status, Decl(createApi.ts, 5, 77))
originalArgs?: undefined;
>originalArgs : Symbol(originalArgs, Decl(createApi.ts, 6, 28))
}>;
};
=== index.ts ===
import { createApi } from "./createApi";
>createApi : Symbol(createApi, Decl(index.ts, 0, 8))
const slice = createApi({
>slice : Symbol(slice, Decl(index.ts, 2, 5))
>createApi : Symbol(createApi, Decl(index.ts, 0, 8))
endpoints: {
>endpoints : Symbol(endpoints, Decl(index.ts, 2, 25))
test: {
>test : Symbol(test, Decl(index.ts, 3, 14))
url: `/user`,
>url : Symbol(url, Decl(index.ts, 4, 11))
},
},
});
export const { useTestQuery } = slice;
>useTestQuery : Symbol(useTestQuery, Decl(index.ts, 10, 14))
>slice : Symbol(slice, Decl(index.ts, 2, 5))

View File

@ -0,0 +1,73 @@
//// [tests/cases/compiler/declarationEmitOptionalMappedTypePropertyNoStrictNullChecks1.ts] ////
=== createApi.ts ===
type Id<T> = {
>Id : { [K in keyof T]: T[K]; }
> : ^^^ ^^^^^^^^^^^^^^^^^^^^^
[K in keyof T]: T[K];
} & {};
export declare function createApi<Definitions>(_: { endpoints: Definitions }): {
>createApi : <Definitions>(_: { endpoints: Definitions; }) => { [K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{ status: "uninitialized"; originalArgs?: undefined; }>; }
> : ^ ^^ ^^ ^^^^^
>_ : { endpoints: Definitions; }
> : ^^^^^^^^^^^^^ ^^^
>endpoints : Definitions
> : ^^^^^^^^^^^
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
status: "uninitialized";
>status : "uninitialized"
> : ^^^^^^^^^^^^^^^
originalArgs?: undefined;
>originalArgs : undefined
> : ^^^^^^^^^
}>;
};
=== index.ts ===
import { createApi } from "./createApi";
>createApi : <Definitions>(_: { endpoints: Definitions; }) => { [K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => { status: "uninitialized"; originalArgs?: undefined; }; }
> : ^ ^^ ^^ ^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^
const slice = createApi({
>slice : { useTestQuery: () => { status: "uninitialized"; originalArgs?: undefined; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^
>createApi({ endpoints: { test: { url: `/user`, }, },}) : { useTestQuery: () => { status: "uninitialized"; originalArgs?: undefined; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^
>createApi : <Definitions>(_: { endpoints: Definitions; }) => { [K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => { status: "uninitialized"; originalArgs?: undefined; }; }
> : ^ ^^ ^^ ^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^
>{ endpoints: { test: { url: `/user`, }, },} : { endpoints: { test: { url: string; }; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
endpoints: {
>endpoints : { test: { url: string; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^
>{ test: { url: `/user`, }, } : { test: { url: string; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^
test: {
>test : { url: string; }
> : ^^^^^^^^^^^^^^^^
>{ url: `/user`, } : { url: string; }
> : ^^^^^^^^^^^^^^^^
url: `/user`,
>url : string
> : ^^^^^^
>`/user` : "/user"
> : ^^^^^^^
},
},
});
export const { useTestQuery } = slice;
>useTestQuery : () => { status: "uninitialized"; originalArgs?: undefined; }
> : ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^
>slice : { useTestQuery: () => { status: "uninitialized"; originalArgs?: undefined; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^

View File

@ -0,0 +1,48 @@
//// [tests/cases/compiler/declarationEmitOptionalMappedTypePropertyNoStrictNullChecks2.ts] ////
//// [createApi.ts]
type Id<T> = {
[K in keyof T]: T[K];
} & {};
export declare function createApi<Definitions>(_: { endpoints: Definitions }): {
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
status: "uninitialized";
originalArgs?: any[];
}>;
};
//// [index.ts]
import { createApi } from "./createApi";
const slice = createApi({
endpoints: {
test: {
url: `/user`,
},
},
});
export const { useTestQuery } = slice;
//// [createApi.d.ts]
type Id<T> = {
[K in keyof T]: T[K];
} & {};
export declare function createApi<Definitions>(_: {
endpoints: Definitions;
}): {
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
status: "uninitialized";
originalArgs?: any[];
}>;
};
export {};
//// [index.d.ts]
export declare const useTestQuery: () => {
status: "uninitialized";
originalArgs?: any[];
};

View File

@ -0,0 +1,63 @@
//// [tests/cases/compiler/declarationEmitOptionalMappedTypePropertyNoStrictNullChecks2.ts] ////
=== createApi.ts ===
type Id<T> = {
>Id : Symbol(Id, Decl(createApi.ts, 0, 0))
>T : Symbol(T, Decl(createApi.ts, 0, 8))
[K in keyof T]: T[K];
>K : Symbol(K, Decl(createApi.ts, 1, 3))
>T : Symbol(T, Decl(createApi.ts, 0, 8))
>T : Symbol(T, Decl(createApi.ts, 0, 8))
>K : Symbol(K, Decl(createApi.ts, 1, 3))
} & {};
export declare function createApi<Definitions>(_: { endpoints: Definitions }): {
>createApi : Symbol(createApi, Decl(createApi.ts, 2, 7))
>Definitions : Symbol(Definitions, Decl(createApi.ts, 4, 34))
>_ : Symbol(_, Decl(createApi.ts, 4, 47))
>endpoints : Symbol(endpoints, Decl(createApi.ts, 4, 51))
>Definitions : Symbol(Definitions, Decl(createApi.ts, 4, 34))
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
>K : Symbol(K, Decl(createApi.ts, 5, 3))
>Definitions : Symbol(Definitions, Decl(createApi.ts, 4, 34))
>Capitalize : Symbol(Capitalize, Decl(lib.es5.d.ts, --, --))
>K : Symbol(K, Decl(createApi.ts, 5, 3))
>Id : Symbol(Id, Decl(createApi.ts, 0, 0))
status: "uninitialized";
>status : Symbol(status, Decl(createApi.ts, 5, 77))
originalArgs?: any[];
>originalArgs : Symbol(originalArgs, Decl(createApi.ts, 6, 28))
}>;
};
=== index.ts ===
import { createApi } from "./createApi";
>createApi : Symbol(createApi, Decl(index.ts, 0, 8))
const slice = createApi({
>slice : Symbol(slice, Decl(index.ts, 2, 5))
>createApi : Symbol(createApi, Decl(index.ts, 0, 8))
endpoints: {
>endpoints : Symbol(endpoints, Decl(index.ts, 2, 25))
test: {
>test : Symbol(test, Decl(index.ts, 3, 14))
url: `/user`,
>url : Symbol(url, Decl(index.ts, 4, 11))
},
},
});
export const { useTestQuery } = slice;
>useTestQuery : Symbol(useTestQuery, Decl(index.ts, 10, 14))
>slice : Symbol(slice, Decl(index.ts, 2, 5))

View File

@ -0,0 +1,73 @@
//// [tests/cases/compiler/declarationEmitOptionalMappedTypePropertyNoStrictNullChecks2.ts] ////
=== createApi.ts ===
type Id<T> = {
>Id : { [K in keyof T]: T[K]; }
> : ^^^ ^^^^^^^^^^^^^^^^^^^^^
[K in keyof T]: T[K];
} & {};
export declare function createApi<Definitions>(_: { endpoints: Definitions }): {
>createApi : <Definitions>(_: { endpoints: Definitions; }) => { [K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{ status: "uninitialized"; originalArgs?: any[]; }>; }
> : ^ ^^ ^^ ^^^^^
>_ : { endpoints: Definitions; }
> : ^^^^^^^^^^^^^ ^^^
>endpoints : Definitions
> : ^^^^^^^^^^^
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
status: "uninitialized";
>status : "uninitialized"
> : ^^^^^^^^^^^^^^^
originalArgs?: any[];
>originalArgs : any[]
> : ^^^^^
}>;
};
=== index.ts ===
import { createApi } from "./createApi";
>createApi : <Definitions>(_: { endpoints: Definitions; }) => { [K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => { status: "uninitialized"; originalArgs?: any[]; }; }
> : ^ ^^ ^^ ^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^
const slice = createApi({
>slice : { useTestQuery: () => { status: "uninitialized"; originalArgs?: any[]; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^
>createApi({ endpoints: { test: { url: `/user`, }, },}) : { useTestQuery: () => { status: "uninitialized"; originalArgs?: any[]; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^
>createApi : <Definitions>(_: { endpoints: Definitions; }) => { [K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => { status: "uninitialized"; originalArgs?: any[]; }; }
> : ^ ^^ ^^ ^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^
>{ endpoints: { test: { url: `/user`, }, },} : { endpoints: { test: { url: string; }; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
endpoints: {
>endpoints : { test: { url: string; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^
>{ test: { url: `/user`, }, } : { test: { url: string; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^
test: {
>test : { url: string; }
> : ^^^^^^^^^^^^^^^^
>{ url: `/user`, } : { url: string; }
> : ^^^^^^^^^^^^^^^^
url: `/user`,
>url : string
> : ^^^^^^
>`/user` : "/user"
> : ^^^^^^^
},
},
});
export const { useTestQuery } = slice;
>useTestQuery : () => { status: "uninitialized"; originalArgs?: any[]; }
> : ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^
>slice : { useTestQuery: () => { status: "uninitialized"; originalArgs?: any[]; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^

View File

@ -0,0 +1,48 @@
//// [tests/cases/compiler/declarationEmitOptionalMappedTypePropertyNoStrictNullChecks3.ts] ////
//// [createApi.ts]
type Id<T> = {
[K in keyof T]: T[K];
} & {};
export declare function createApi<Definitions>(_: { endpoints: Definitions }): {
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
status: "uninitialized";
originalArgs?: never;
}>;
};
//// [index.ts]
import { createApi } from "./createApi";
const slice = createApi({
endpoints: {
test: {
url: `/user`,
},
},
});
export const { useTestQuery } = slice;
//// [createApi.d.ts]
type Id<T> = {
[K in keyof T]: T[K];
} & {};
export declare function createApi<Definitions>(_: {
endpoints: Definitions;
}): {
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
status: "uninitialized";
originalArgs?: never;
}>;
};
export {};
//// [index.d.ts]
export declare const useTestQuery: () => {
status: "uninitialized";
originalArgs?: never;
};

View File

@ -0,0 +1,63 @@
//// [tests/cases/compiler/declarationEmitOptionalMappedTypePropertyNoStrictNullChecks3.ts] ////
=== createApi.ts ===
type Id<T> = {
>Id : Symbol(Id, Decl(createApi.ts, 0, 0))
>T : Symbol(T, Decl(createApi.ts, 0, 8))
[K in keyof T]: T[K];
>K : Symbol(K, Decl(createApi.ts, 1, 3))
>T : Symbol(T, Decl(createApi.ts, 0, 8))
>T : Symbol(T, Decl(createApi.ts, 0, 8))
>K : Symbol(K, Decl(createApi.ts, 1, 3))
} & {};
export declare function createApi<Definitions>(_: { endpoints: Definitions }): {
>createApi : Symbol(createApi, Decl(createApi.ts, 2, 7))
>Definitions : Symbol(Definitions, Decl(createApi.ts, 4, 34))
>_ : Symbol(_, Decl(createApi.ts, 4, 47))
>endpoints : Symbol(endpoints, Decl(createApi.ts, 4, 51))
>Definitions : Symbol(Definitions, Decl(createApi.ts, 4, 34))
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
>K : Symbol(K, Decl(createApi.ts, 5, 3))
>Definitions : Symbol(Definitions, Decl(createApi.ts, 4, 34))
>Capitalize : Symbol(Capitalize, Decl(lib.es5.d.ts, --, --))
>K : Symbol(K, Decl(createApi.ts, 5, 3))
>Id : Symbol(Id, Decl(createApi.ts, 0, 0))
status: "uninitialized";
>status : Symbol(status, Decl(createApi.ts, 5, 77))
originalArgs?: never;
>originalArgs : Symbol(originalArgs, Decl(createApi.ts, 6, 28))
}>;
};
=== index.ts ===
import { createApi } from "./createApi";
>createApi : Symbol(createApi, Decl(index.ts, 0, 8))
const slice = createApi({
>slice : Symbol(slice, Decl(index.ts, 2, 5))
>createApi : Symbol(createApi, Decl(index.ts, 0, 8))
endpoints: {
>endpoints : Symbol(endpoints, Decl(index.ts, 2, 25))
test: {
>test : Symbol(test, Decl(index.ts, 3, 14))
url: `/user`,
>url : Symbol(url, Decl(index.ts, 4, 11))
},
},
});
export const { useTestQuery } = slice;
>useTestQuery : Symbol(useTestQuery, Decl(index.ts, 10, 14))
>slice : Symbol(slice, Decl(index.ts, 2, 5))

View File

@ -0,0 +1,73 @@
//// [tests/cases/compiler/declarationEmitOptionalMappedTypePropertyNoStrictNullChecks3.ts] ////
=== createApi.ts ===
type Id<T> = {
>Id : { [K in keyof T]: T[K]; }
> : ^^^ ^^^^^^^^^^^^^^^^^^^^^
[K in keyof T]: T[K];
} & {};
export declare function createApi<Definitions>(_: { endpoints: Definitions }): {
>createApi : <Definitions>(_: { endpoints: Definitions; }) => { [K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{ status: "uninitialized"; originalArgs?: never; }>; }
> : ^ ^^ ^^ ^^^^^
>_ : { endpoints: Definitions; }
> : ^^^^^^^^^^^^^ ^^^
>endpoints : Definitions
> : ^^^^^^^^^^^
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
status: "uninitialized";
>status : "uninitialized"
> : ^^^^^^^^^^^^^^^
originalArgs?: never;
>originalArgs : never
> : ^^^^^
}>;
};
=== index.ts ===
import { createApi } from "./createApi";
>createApi : <Definitions>(_: { endpoints: Definitions; }) => { [K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => { status: "uninitialized"; originalArgs?: never; }; }
> : ^ ^^ ^^ ^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^
const slice = createApi({
>slice : { useTestQuery: () => { status: "uninitialized"; originalArgs?: never; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^
>createApi({ endpoints: { test: { url: `/user`, }, },}) : { useTestQuery: () => { status: "uninitialized"; originalArgs?: never; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^
>createApi : <Definitions>(_: { endpoints: Definitions; }) => { [K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => { status: "uninitialized"; originalArgs?: never; }; }
> : ^ ^^ ^^ ^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^
>{ endpoints: { test: { url: `/user`, }, },} : { endpoints: { test: { url: string; }; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
endpoints: {
>endpoints : { test: { url: string; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^
>{ test: { url: `/user`, }, } : { test: { url: string; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^
test: {
>test : { url: string; }
> : ^^^^^^^^^^^^^^^^
>{ url: `/user`, } : { url: string; }
> : ^^^^^^^^^^^^^^^^
url: `/user`,
>url : string
> : ^^^^^^
>`/user` : "/user"
> : ^^^^^^^
},
},
});
export const { useTestQuery } = slice;
>useTestQuery : () => { status: "uninitialized"; originalArgs?: never; }
> : ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^
>slice : { useTestQuery: () => { status: "uninitialized"; originalArgs?: never; }; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^

View File

@ -0,0 +1,17 @@
//// [tests/cases/compiler/declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts] ////
//// [declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts]
type InputType = { enable_member_receipts?: boolean };
type AsEmptyObject<T> = { [K in keyof T]?: undefined };
export const test = {
...({} as AsEmptyObject<InputType>),
};
//// [declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.d.ts]
export declare const test: {
enable_member_receipts?: undefined;
};

View File

@ -0,0 +1,22 @@
//// [tests/cases/compiler/declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts] ////
=== declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts ===
type InputType = { enable_member_receipts?: boolean };
>InputType : Symbol(InputType, Decl(declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts, 0, 0))
>enable_member_receipts : Symbol(enable_member_receipts, Decl(declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts, 0, 18))
type AsEmptyObject<T> = { [K in keyof T]?: undefined };
>AsEmptyObject : Symbol(AsEmptyObject, Decl(declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts, 0, 54))
>T : Symbol(T, Decl(declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts, 1, 19))
>K : Symbol(K, Decl(declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts, 1, 27))
>T : Symbol(T, Decl(declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts, 1, 19))
export const test = {
>test : Symbol(test, Decl(declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts, 3, 12))
...({} as AsEmptyObject<InputType>),
>AsEmptyObject : Symbol(AsEmptyObject, Decl(declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts, 0, 54))
>InputType : Symbol(InputType, Decl(declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts, 0, 0))
};

View File

@ -0,0 +1,29 @@
//// [tests/cases/compiler/declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts] ////
=== declarationEmitOptionalMappedTypePropertyNoStrictNullChecks4.ts ===
type InputType = { enable_member_receipts?: boolean };
>InputType : InputType
> : ^^^^^^^^^
>enable_member_receipts : boolean
> : ^^^^^^^
type AsEmptyObject<T> = { [K in keyof T]?: undefined };
>AsEmptyObject : AsEmptyObject<T>
> : ^^^^^^^^^^^^^^^^
export const test = {
>test : { enable_member_receipts?: undefined; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>{ ...({} as AsEmptyObject<InputType>),} : { enable_member_receipts?: undefined; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...({} as AsEmptyObject<InputType>),
>({} as AsEmptyObject<InputType>) : AsEmptyObject<InputType>
> : ^^^^^^^^^^^^^^^^^^^^^^^^
>{} as AsEmptyObject<InputType> : AsEmptyObject<InputType>
> : ^^^^^^^^^^^^^^^^^^^^^^^^
>{} : {}
> : ^^
};

View File

@ -0,0 +1,30 @@
// @strictNullChecks: false
// @declaration: true
// @emitDeclarationOnly: true
// @filename: createApi.ts
type Id<T> = {
[K in keyof T]: T[K];
} & {};
export declare function createApi<Definitions>(_: { endpoints: Definitions }): {
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
status: "uninitialized";
originalArgs?: undefined;
}>;
};
// @filename: index.ts
import { createApi } from "./createApi";
const slice = createApi({
endpoints: {
test: {
url: `/user`,
},
},
});
export const { useTestQuery } = slice;

View File

@ -0,0 +1,30 @@
// @strictNullChecks: false
// @declaration: true
// @emitDeclarationOnly: true
// @filename: createApi.ts
type Id<T> = {
[K in keyof T]: T[K];
} & {};
export declare function createApi<Definitions>(_: { endpoints: Definitions }): {
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
status: "uninitialized";
originalArgs?: any[];
}>;
};
// @filename: index.ts
import { createApi } from "./createApi";
const slice = createApi({
endpoints: {
test: {
url: `/user`,
},
},
});
export const { useTestQuery } = slice;

View File

@ -0,0 +1,30 @@
// @strictNullChecks: false
// @declaration: true
// @emitDeclarationOnly: true
// @filename: createApi.ts
type Id<T> = {
[K in keyof T]: T[K];
} & {};
export declare function createApi<Definitions>(_: { endpoints: Definitions }): {
[K in keyof Definitions as `use${Capitalize<K & string>}Query`]: () => Id<{
status: "uninitialized";
originalArgs?: never;
}>;
};
// @filename: index.ts
import { createApi } from "./createApi";
const slice = createApi({
endpoints: {
test: {
url: `/user`,
},
},
});
export const { useTestQuery } = slice;

View File

@ -0,0 +1,10 @@
// @strictNullChecks: false
// @declaration: true
// @emitDeclarationOnly: true
type InputType = { enable_member_receipts?: boolean };
type AsEmptyObject<T> = { [K in keyof T]?: undefined };
export const test = {
...({} as AsEmptyObject<InputType>),
};