diff --git a/tests/baselines/reference/keyofAndIndexedAccess2.errors.txt b/tests/baselines/reference/keyofAndIndexedAccess2.errors.txt index 6e1b87a72e3..ba2fe38c145 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess2.errors.txt +++ b/tests/baselines/reference/keyofAndIndexedAccess2.errors.txt @@ -187,4 +187,14 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccess2.ts(108,5): error TS23 !!! error TS2322: Type '123' is not assignable to type '123 & "some string"'. !!! error TS2322: Type '123' is not assignable to type '"some string"'. } + + // Repros from #30938 + + function fn} | {elements: Array}>(param: T, cb: (element: T['elements'][number]) => void) { + cb(param.elements[0]); + } + + function fn2>(param: T, cb: (element: T[number]) => void) { + cb(param[0]); + } \ No newline at end of file diff --git a/tests/baselines/reference/keyofAndIndexedAccess2.js b/tests/baselines/reference/keyofAndIndexedAccess2.js index 8dad708c298..2ef82b3d68e 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess2.js +++ b/tests/baselines/reference/keyofAndIndexedAccess2.js @@ -108,6 +108,16 @@ interface Type { function get123(): Type[K] { return 123; // Error } + +// Repros from #30938 + +function fn} | {elements: Array}>(param: T, cb: (element: T['elements'][number]) => void) { + cb(param.elements[0]); +} + +function fn2>(param: T, cb: (element: T[number]) => void) { + cb(param[0]); +} //// [keyofAndIndexedAccess2.js] @@ -183,3 +193,10 @@ export function getEntity(id, state) { function get123() { return 123; // Error } +// Repros from #30938 +function fn(param, cb) { + cb(param.elements[0]); +} +function fn2(param, cb) { + cb(param[0]); +} diff --git a/tests/baselines/reference/keyofAndIndexedAccess2.symbols b/tests/baselines/reference/keyofAndIndexedAccess2.symbols index 803700efa37..5113eb736db 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess2.symbols +++ b/tests/baselines/reference/keyofAndIndexedAccess2.symbols @@ -388,3 +388,40 @@ function get123(): Type[K] { return 123; // Error } +// Repros from #30938 + +function fn} | {elements: Array}>(param: T, cb: (element: T['elements'][number]) => void) { +>fn : Symbol(fn, Decl(keyofAndIndexedAccess2.ts, 108, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess2.ts, 112, 12)) +>elements : Symbol(elements, Decl(keyofAndIndexedAccess2.ts, 112, 23)) +>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 2 more) +>elements : Symbol(elements, Decl(keyofAndIndexedAccess2.ts, 112, 51)) +>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 2 more) +>param : Symbol(param, Decl(keyofAndIndexedAccess2.ts, 112, 77)) +>T : Symbol(T, Decl(keyofAndIndexedAccess2.ts, 112, 12)) +>cb : Symbol(cb, Decl(keyofAndIndexedAccess2.ts, 112, 86)) +>element : Symbol(element, Decl(keyofAndIndexedAccess2.ts, 112, 92)) +>T : Symbol(T, Decl(keyofAndIndexedAccess2.ts, 112, 12)) + + cb(param.elements[0]); +>cb : Symbol(cb, Decl(keyofAndIndexedAccess2.ts, 112, 86)) +>param.elements : Symbol(elements, Decl(keyofAndIndexedAccess2.ts, 112, 23), Decl(keyofAndIndexedAccess2.ts, 112, 51)) +>param : Symbol(param, Decl(keyofAndIndexedAccess2.ts, 112, 77)) +>elements : Symbol(elements, Decl(keyofAndIndexedAccess2.ts, 112, 23), Decl(keyofAndIndexedAccess2.ts, 112, 51)) +} + +function fn2>(param: T, cb: (element: T[number]) => void) { +>fn2 : Symbol(fn2, Decl(keyofAndIndexedAccess2.ts, 114, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess2.ts, 116, 13)) +>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 2 more) +>param : Symbol(param, Decl(keyofAndIndexedAccess2.ts, 116, 38)) +>T : Symbol(T, Decl(keyofAndIndexedAccess2.ts, 116, 13)) +>cb : Symbol(cb, Decl(keyofAndIndexedAccess2.ts, 116, 47)) +>element : Symbol(element, Decl(keyofAndIndexedAccess2.ts, 116, 53)) +>T : Symbol(T, Decl(keyofAndIndexedAccess2.ts, 116, 13)) + + cb(param[0]); +>cb : Symbol(cb, Decl(keyofAndIndexedAccess2.ts, 116, 47)) +>param : Symbol(param, Decl(keyofAndIndexedAccess2.ts, 116, 38)) +} + diff --git a/tests/baselines/reference/keyofAndIndexedAccess2.types b/tests/baselines/reference/keyofAndIndexedAccess2.types index 5f5b80a4819..286db62e4b5 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess2.types +++ b/tests/baselines/reference/keyofAndIndexedAccess2.types @@ -423,3 +423,37 @@ function get123(): Type[K] { >123 : 123 } +// Repros from #30938 + +function fn} | {elements: Array}>(param: T, cb: (element: T['elements'][number]) => void) { +>fn : (param: T, cb: (element: T["elements"][number]) => void) => void +>elements : string[] +>elements : number[] +>param : T +>cb : (element: T["elements"][number]) => void +>element : T["elements"][number] + + cb(param.elements[0]); +>cb(param.elements[0]) : void +>cb : (element: T["elements"][number]) => void +>param.elements[0] : string | number +>param.elements : string[] | number[] +>param : T +>elements : string[] | number[] +>0 : 0 +} + +function fn2>(param: T, cb: (element: T[number]) => void) { +>fn2 : (param: T, cb: (element: T[number]) => void) => void +>param : T +>cb : (element: T[number]) => void +>element : T[number] + + cb(param[0]); +>cb(param[0]) : void +>cb : (element: T[number]) => void +>param[0] : string +>param : T +>0 : 0 +} +