From d147a0d49ee25b05619e9d0173c9e848ee8880ba Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Thu, 4 Apr 2019 10:52:38 -0700 Subject: [PATCH 1/2] Explicitly encode keyof behaviors for never and unknown into getIndexType --- src/compiler/checker.ts | 2 + ...AccessKeyofReliesOnKeyofNeverUpperBound.js | 59 + ...sKeyofReliesOnKeyofNeverUpperBound.symbols | 130 + ...essKeyofReliesOnKeyofNeverUpperBound.types | 96 + .../reference/infiniteConstraints.errors.txt | 8 +- .../reference/keyofAndIndexedAccess.js | 4 +- .../reference/keyofAndIndexedAccess.symbols | 2561 +++++++++-------- .../reference/keyofAndIndexedAccess.types | 7 +- ...AccessKeyofReliesOnKeyofNeverUpperBound.ts | 42 + .../types/keyof/keyofAndIndexedAccess.ts | 3 +- 10 files changed, 1622 insertions(+), 1290 deletions(-) create mode 100644 tests/baselines/reference/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.js create mode 100644 tests/baselines/reference/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.symbols create mode 100644 tests/baselines/reference/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.types create mode 100644 tests/cases/compiler/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b9e5bcaeddf2c..5019be7c8c508 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -9797,6 +9797,8 @@ namespace ts { maybeTypeOfKind(type, TypeFlags.InstantiableNonPrimitive) ? getIndexTypeForGenericType(type, stringsOnly) : getObjectFlags(type) & ObjectFlags.Mapped ? getConstraintTypeFromMappedType(type) : type === wildcardType ? wildcardType : + type.flags & TypeFlags.Never ? keyofConstraintType : + type.flags & TypeFlags.Unknown ? neverType : type.flags & TypeFlags.Any ? keyofConstraintType : stringsOnly ? getIndexInfoOfType(type, IndexKind.String) ? stringType : getLiteralTypeFromProperties(type, TypeFlags.StringLiteral) : getIndexInfoOfType(type, IndexKind.String) ? getUnionType([stringType, numberType, getLiteralTypeFromProperties(type, TypeFlags.UniqueESSymbol)]) : diff --git a/tests/baselines/reference/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.js b/tests/baselines/reference/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.js new file mode 100644 index 0000000000000..737d48245a9f3 --- /dev/null +++ b/tests/baselines/reference/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.js @@ -0,0 +1,59 @@ +//// [complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts] +interface TextChannel { + id: string; + type: 'text'; + phoneNumber: string; +} + +interface EmailChannel { + id: string; + type: 'email'; + addres: string; +} + +type Channel = TextChannel | EmailChannel; + +export type ChannelType = Channel extends { type: infer R } ? R : never; + +type Omit = Pick< + T, + ({ [P in keyof T]: P } & { [P in K]: never } & { [x: string]: never })[keyof T] +>; + +type ChannelOfType = A extends { type: T } + ? A + : never; + + +export type NewChannel = Pick & + Partial> & { localChannelId: string }; + + +export function makeNewChannel(type: T): NewChannel> { + const localChannelId = `blahblahblah`; + return { type, localChannelId }; +} + +const newTextChannel = makeNewChannel('text'); +// This should work +newTextChannel.phoneNumber = '613-555-1234'; + +const newTextChannel2 : NewChannel = makeNewChannel('text'); +// Compare with this, which ofc works. +newTextChannel2.phoneNumber = '613-555-1234'; + + +//// [complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.js] +"use strict"; +exports.__esModule = true; +function makeNewChannel(type) { + var localChannelId = "blahblahblah"; + return { type: type, localChannelId: localChannelId }; +} +exports.makeNewChannel = makeNewChannel; +var newTextChannel = makeNewChannel('text'); +// This should work +newTextChannel.phoneNumber = '613-555-1234'; +var newTextChannel2 = makeNewChannel('text'); +// Compare with this, which ofc works. +newTextChannel2.phoneNumber = '613-555-1234'; diff --git a/tests/baselines/reference/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.symbols b/tests/baselines/reference/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.symbols new file mode 100644 index 0000000000000..5e1a8671422ec --- /dev/null +++ b/tests/baselines/reference/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.symbols @@ -0,0 +1,130 @@ +=== tests/cases/compiler/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts === +interface TextChannel { +>TextChannel : Symbol(TextChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 0, 0)) + + id: string; +>id : Symbol(TextChannel.id, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 0, 23)) + + type: 'text'; +>type : Symbol(TextChannel.type, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 1, 15)) + + phoneNumber: string; +>phoneNumber : Symbol(TextChannel.phoneNumber, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 2, 17)) +} + +interface EmailChannel { +>EmailChannel : Symbol(EmailChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 4, 1)) + + id: string; +>id : Symbol(EmailChannel.id, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 6, 24)) + + type: 'email'; +>type : Symbol(EmailChannel.type, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 7, 15)) + + addres: string; +>addres : Symbol(EmailChannel.addres, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 8, 18)) +} + +type Channel = TextChannel | EmailChannel; +>Channel : Symbol(Channel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 10, 1)) +>TextChannel : Symbol(TextChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 0, 0)) +>EmailChannel : Symbol(EmailChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 4, 1)) + +export type ChannelType = Channel extends { type: infer R } ? R : never; +>ChannelType : Symbol(ChannelType, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 12, 42)) +>Channel : Symbol(Channel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 10, 1)) +>type : Symbol(type, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 14, 43)) +>R : Symbol(R, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 14, 55)) +>R : Symbol(R, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 14, 55)) + +type Omit = Pick< +>Omit : Symbol(Omit, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 14, 72)) +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 16, 10)) +>K : Symbol(K, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 16, 12)) +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 16, 10)) +>Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --)) + + T, +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 16, 10)) + + ({ [P in keyof T]: P } & { [P in K]: never } & { [x: string]: never })[keyof T] +>P : Symbol(P, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 18, 8)) +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 16, 10)) +>P : Symbol(P, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 18, 8)) +>P : Symbol(P, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 18, 32)) +>K : Symbol(K, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 16, 12)) +>x : Symbol(x, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 18, 54)) +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 16, 10)) + +>; + +type ChannelOfType = A extends { type: T } +>ChannelOfType : Symbol(ChannelOfType, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 19, 2)) +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 21, 19)) +>ChannelType : Symbol(ChannelType, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 12, 42)) +>A : Symbol(A, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 21, 41)) +>Channel : Symbol(Channel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 10, 1)) +>A : Symbol(A, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 21, 41)) +>type : Symbol(type, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 21, 68)) +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 21, 19)) + + ? A +>A : Symbol(A, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 21, 41)) + + : never; + + +export type NewChannel = Pick & +>NewChannel : Symbol(NewChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 23, 12)) +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 26, 23)) +>Channel : Symbol(Channel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 10, 1)) +>Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --)) +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 26, 23)) + + Partial> & { localChannelId: string }; +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) +>Omit : Symbol(Omit, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 14, 72)) +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 26, 23)) +>localChannelId : Symbol(localChannelId, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 27, 39)) + + +export function makeNewChannel(type: T): NewChannel> { +>makeNewChannel : Symbol(makeNewChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 27, 65)) +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 30, 31)) +>ChannelType : Symbol(ChannelType, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 12, 42)) +>type : Symbol(type, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 30, 54)) +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 30, 31)) +>NewChannel : Symbol(NewChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 23, 12)) +>ChannelOfType : Symbol(ChannelOfType, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 19, 2)) +>T : Symbol(T, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 30, 31)) + + const localChannelId = `blahblahblah`; +>localChannelId : Symbol(localChannelId, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 31, 9)) + + return { type, localChannelId }; +>type : Symbol(type, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 32, 12)) +>localChannelId : Symbol(localChannelId, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 32, 18)) +} + +const newTextChannel = makeNewChannel('text'); +>newTextChannel : Symbol(newTextChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 35, 5)) +>makeNewChannel : Symbol(makeNewChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 27, 65)) + +// This should work +newTextChannel.phoneNumber = '613-555-1234'; +>newTextChannel.phoneNumber : Symbol(phoneNumber, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 2, 17)) +>newTextChannel : Symbol(newTextChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 35, 5)) +>phoneNumber : Symbol(phoneNumber, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 2, 17)) + +const newTextChannel2 : NewChannel = makeNewChannel('text'); +>newTextChannel2 : Symbol(newTextChannel2, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 39, 5)) +>NewChannel : Symbol(NewChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 23, 12)) +>TextChannel : Symbol(TextChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 0, 0)) +>makeNewChannel : Symbol(makeNewChannel, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 27, 65)) + +// Compare with this, which ofc works. +newTextChannel2.phoneNumber = '613-555-1234'; +>newTextChannel2.phoneNumber : Symbol(phoneNumber, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 2, 17)) +>newTextChannel2 : Symbol(newTextChannel2, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 39, 5)) +>phoneNumber : Symbol(phoneNumber, Decl(complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts, 2, 17)) + diff --git a/tests/baselines/reference/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.types b/tests/baselines/reference/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.types new file mode 100644 index 0000000000000..9447ce3d53195 --- /dev/null +++ b/tests/baselines/reference/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.types @@ -0,0 +1,96 @@ +=== tests/cases/compiler/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts === +interface TextChannel { + id: string; +>id : string + + type: 'text'; +>type : "text" + + phoneNumber: string; +>phoneNumber : string +} + +interface EmailChannel { + id: string; +>id : string + + type: 'email'; +>type : "email" + + addres: string; +>addres : string +} + +type Channel = TextChannel | EmailChannel; +>Channel : Channel + +export type ChannelType = Channel extends { type: infer R } ? R : never; +>ChannelType : "text" | "email" +>type : R + +type Omit = Pick< +>Omit : Pick + + T, + ({ [P in keyof T]: P } & { [P in K]: never } & { [x: string]: never })[keyof T] +>x : string + +>; + +type ChannelOfType = A extends { type: T } +>ChannelOfType : ChannelOfType +>type : T + + ? A + : never; + + +export type NewChannel = Pick & +>NewChannel : NewChannel + + Partial> & { localChannelId: string }; +>localChannelId : string + + +export function makeNewChannel(type: T): NewChannel> { +>makeNewChannel : (type: T) => NewChannel | ChannelOfType> +>type : T + + const localChannelId = `blahblahblah`; +>localChannelId : "blahblahblah" +>`blahblahblah` : "blahblahblah" + + return { type, localChannelId }; +>{ type, localChannelId } : { type: T; localChannelId: string; } +>type : T +>localChannelId : string +} + +const newTextChannel = makeNewChannel('text'); +>newTextChannel : NewChannel +>makeNewChannel('text') : NewChannel +>makeNewChannel : (type: T) => NewChannel | ChannelOfType> +>'text' : "text" + +// This should work +newTextChannel.phoneNumber = '613-555-1234'; +>newTextChannel.phoneNumber = '613-555-1234' : "613-555-1234" +>newTextChannel.phoneNumber : string +>newTextChannel : NewChannel +>phoneNumber : string +>'613-555-1234' : "613-555-1234" + +const newTextChannel2 : NewChannel = makeNewChannel('text'); +>newTextChannel2 : NewChannel +>makeNewChannel('text') : NewChannel +>makeNewChannel : (type: T) => NewChannel | ChannelOfType> +>'text' : "text" + +// Compare with this, which ofc works. +newTextChannel2.phoneNumber = '613-555-1234'; +>newTextChannel2.phoneNumber = '613-555-1234' : "613-555-1234" +>newTextChannel2.phoneNumber : string +>newTextChannel2 : NewChannel +>phoneNumber : string +>'613-555-1234' : "613-555-1234" + diff --git a/tests/baselines/reference/infiniteConstraints.errors.txt b/tests/baselines/reference/infiniteConstraints.errors.txt index 414fa8f9213a4..73d76f1659ad6 100644 --- a/tests/baselines/reference/infiniteConstraints.errors.txt +++ b/tests/baselines/reference/infiniteConstraints.errors.txt @@ -1,13 +1,11 @@ tests/cases/compiler/infiniteConstraints.ts(3,37): error TS2589: Type instantiation is excessively deep and possibly infinite. tests/cases/compiler/infiniteConstraints.ts(4,37): error TS2536: Type '"val"' cannot be used to index type 'B[Exclude]'. -tests/cases/compiler/infiniteConstraints.ts(21,21): error TS2536: Type '"val"' cannot be used to index type 'Extract>'. -tests/cases/compiler/infiniteConstraints.ts(21,57): error TS2536: Type '"val"' cannot be used to index type 'Extract], Record<"val", string>>'. tests/cases/compiler/infiniteConstraints.ts(31,43): error TS2322: Type 'Record<"val", "dup">' is not assignable to type 'never'. tests/cases/compiler/infiniteConstraints.ts(31,63): error TS2322: Type 'Record<"val", "dup">' is not assignable to type 'never'. tests/cases/compiler/infiniteConstraints.ts(36,71): error TS2536: Type '"foo"' cannot be used to index type 'T[keyof T]'. -==== tests/cases/compiler/infiniteConstraints.ts (7 errors) ==== +==== tests/cases/compiler/infiniteConstraints.ts (5 errors) ==== // Both of the following types trigger the recursion limiter in getImmediateBaseConstraint type T1], { val: string }>["val"] }> = B; @@ -33,10 +31,6 @@ tests/cases/compiler/infiniteConstraints.ts(36,71): error TS2536: Type '"foo"' c declare function ensureNoDuplicates< T extends { [K in keyof T]: Extract["val"] extends Extract], Value>["val"] - ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2536: Type '"val"' cannot be used to index type 'Extract>'. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2536: Type '"val"' cannot be used to index type 'Extract], Record<"val", string>>'. ? never : any } diff --git a/tests/baselines/reference/keyofAndIndexedAccess.js b/tests/baselines/reference/keyofAndIndexedAccess.js index 793313fdaa535..c66f0fbde2181 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess.js +++ b/tests/baselines/reference/keyofAndIndexedAccess.js @@ -31,7 +31,8 @@ type K03 = keyof boolean; // "valueOf" type K04 = keyof void; // never type K05 = keyof undefined; // never type K06 = keyof null; // never -type K07 = keyof never; // never +type K07 = keyof never; // string | number | symbol +type K08 = keyof unknown; // never type K10 = keyof Shape; // "name" | "width" | "height" | "visible" type K11 = keyof Shape[]; // "length" | "toString" | ... @@ -1124,6 +1125,7 @@ declare type K04 = keyof void; declare type K05 = keyof undefined; declare type K06 = keyof null; declare type K07 = keyof never; +declare type K08 = keyof unknown; declare type K10 = keyof Shape; declare type K11 = keyof Shape[]; declare type K12 = keyof Dictionary; diff --git a/tests/baselines/reference/keyofAndIndexedAccess.symbols b/tests/baselines/reference/keyofAndIndexedAccess.symbols index 1d26f6dbec3a7..c3bebb6c7d042 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess.symbols +++ b/tests/baselines/reference/keyofAndIndexedAccess.symbols @@ -79,2263 +79,2266 @@ type K05 = keyof undefined; // never type K06 = keyof null; // never >K06 : Symbol(K06, Decl(keyofAndIndexedAccess.ts, 30, 27)) -type K07 = keyof never; // never +type K07 = keyof never; // string | number | symbol >K07 : Symbol(K07, Decl(keyofAndIndexedAccess.ts, 31, 22)) +type K08 = keyof unknown; // never +>K08 : Symbol(K08, Decl(keyofAndIndexedAccess.ts, 32, 23)) + type K10 = keyof Shape; // "name" | "width" | "height" | "visible" ->K10 : Symbol(K10, Decl(keyofAndIndexedAccess.ts, 32, 23)) +>K10 : Symbol(K10, Decl(keyofAndIndexedAccess.ts, 33, 25)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) type K11 = keyof Shape[]; // "length" | "toString" | ... ->K11 : Symbol(K11, Decl(keyofAndIndexedAccess.ts, 34, 23)) +>K11 : Symbol(K11, Decl(keyofAndIndexedAccess.ts, 35, 23)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) type K12 = keyof Dictionary; // string ->K12 : Symbol(K12, Decl(keyofAndIndexedAccess.ts, 35, 25)) +>K12 : Symbol(K12, Decl(keyofAndIndexedAccess.ts, 36, 25)) >Dictionary : Symbol(Dictionary, Decl(keyofAndIndexedAccess.ts, 18, 1)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) type K13 = keyof {}; // never ->K13 : Symbol(K13, Decl(keyofAndIndexedAccess.ts, 36, 35)) +>K13 : Symbol(K13, Decl(keyofAndIndexedAccess.ts, 37, 35)) type K14 = keyof Object; // "constructor" | "toString" | ... ->K14 : Symbol(K14, Decl(keyofAndIndexedAccess.ts, 37, 20)) +>K14 : Symbol(K14, Decl(keyofAndIndexedAccess.ts, 38, 20)) >Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) type K15 = keyof E; // "toString" | "toFixed" | "toExponential" | ... ->K15 : Symbol(K15, Decl(keyofAndIndexedAccess.ts, 38, 24)) +>K15 : Symbol(K15, Decl(keyofAndIndexedAccess.ts, 39, 24)) >E : Symbol(E, Decl(keyofAndIndexedAccess.ts, 21, 48)) type K16 = keyof [string, number]; // "0" | "1" | "length" | "toString" | ... ->K16 : Symbol(K16, Decl(keyofAndIndexedAccess.ts, 39, 19)) +>K16 : Symbol(K16, Decl(keyofAndIndexedAccess.ts, 40, 19)) type K17 = keyof (Shape | Item); // "name" ->K17 : Symbol(K17, Decl(keyofAndIndexedAccess.ts, 40, 34)) +>K17 : Symbol(K17, Decl(keyofAndIndexedAccess.ts, 41, 34)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) >Item : Symbol(Item, Decl(keyofAndIndexedAccess.ts, 9, 1)) type K18 = keyof (Shape & Item); // "name" | "width" | "height" | "visible" | "price" ->K18 : Symbol(K18, Decl(keyofAndIndexedAccess.ts, 41, 32)) +>K18 : Symbol(K18, Decl(keyofAndIndexedAccess.ts, 42, 32)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) >Item : Symbol(Item, Decl(keyofAndIndexedAccess.ts, 9, 1)) type K19 = keyof NumericallyIndexed // never ->K19 : Symbol(K19, Decl(keyofAndIndexedAccess.ts, 42, 32)) +>K19 : Symbol(K19, Decl(keyofAndIndexedAccess.ts, 43, 32)) >NumericallyIndexed : Symbol(NumericallyIndexed, Decl(keyofAndIndexedAccess.ts, 20, 40)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) type KeyOf = keyof T; ->KeyOf : Symbol(KeyOf, Decl(keyofAndIndexedAccess.ts, 43, 42)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 45, 11)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 45, 11)) +>KeyOf : Symbol(KeyOf, Decl(keyofAndIndexedAccess.ts, 44, 42)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 46, 11)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 46, 11)) type K20 = KeyOf; // "name" | "width" | "height" | "visible" ->K20 : Symbol(K20, Decl(keyofAndIndexedAccess.ts, 45, 24)) ->KeyOf : Symbol(KeyOf, Decl(keyofAndIndexedAccess.ts, 43, 42)) +>K20 : Symbol(K20, Decl(keyofAndIndexedAccess.ts, 46, 24)) +>KeyOf : Symbol(KeyOf, Decl(keyofAndIndexedAccess.ts, 44, 42)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) type K21 = KeyOf>; // string ->K21 : Symbol(K21, Decl(keyofAndIndexedAccess.ts, 47, 24)) ->KeyOf : Symbol(KeyOf, Decl(keyofAndIndexedAccess.ts, 43, 42)) +>K21 : Symbol(K21, Decl(keyofAndIndexedAccess.ts, 48, 24)) +>KeyOf : Symbol(KeyOf, Decl(keyofAndIndexedAccess.ts, 44, 42)) >Dictionary : Symbol(Dictionary, Decl(keyofAndIndexedAccess.ts, 18, 1)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) type NAME = "name"; ->NAME : Symbol(NAME, Decl(keyofAndIndexedAccess.ts, 48, 36)) +>NAME : Symbol(NAME, Decl(keyofAndIndexedAccess.ts, 49, 36)) type WIDTH_OR_HEIGHT = "width" | "height"; ->WIDTH_OR_HEIGHT : Symbol(WIDTH_OR_HEIGHT, Decl(keyofAndIndexedAccess.ts, 50, 19)) +>WIDTH_OR_HEIGHT : Symbol(WIDTH_OR_HEIGHT, Decl(keyofAndIndexedAccess.ts, 51, 19)) type Q10 = Shape["name"]; // string ->Q10 : Symbol(Q10, Decl(keyofAndIndexedAccess.ts, 51, 42)) +>Q10 : Symbol(Q10, Decl(keyofAndIndexedAccess.ts, 52, 42)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) type Q11 = Shape["width" | "height"]; // number ->Q11 : Symbol(Q11, Decl(keyofAndIndexedAccess.ts, 53, 25)) +>Q11 : Symbol(Q11, Decl(keyofAndIndexedAccess.ts, 54, 25)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) type Q12 = Shape["name" | "visible"]; // string | boolean ->Q12 : Symbol(Q12, Decl(keyofAndIndexedAccess.ts, 54, 37)) +>Q12 : Symbol(Q12, Decl(keyofAndIndexedAccess.ts, 55, 37)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) type Q20 = Shape[NAME]; // string ->Q20 : Symbol(Q20, Decl(keyofAndIndexedAccess.ts, 55, 37)) +>Q20 : Symbol(Q20, Decl(keyofAndIndexedAccess.ts, 56, 37)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) ->NAME : Symbol(NAME, Decl(keyofAndIndexedAccess.ts, 48, 36)) +>NAME : Symbol(NAME, Decl(keyofAndIndexedAccess.ts, 49, 36)) type Q21 = Shape[WIDTH_OR_HEIGHT]; // number ->Q21 : Symbol(Q21, Decl(keyofAndIndexedAccess.ts, 57, 23)) +>Q21 : Symbol(Q21, Decl(keyofAndIndexedAccess.ts, 58, 23)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) ->WIDTH_OR_HEIGHT : Symbol(WIDTH_OR_HEIGHT, Decl(keyofAndIndexedAccess.ts, 50, 19)) +>WIDTH_OR_HEIGHT : Symbol(WIDTH_OR_HEIGHT, Decl(keyofAndIndexedAccess.ts, 51, 19)) type Q30 = [string, number][0]; // string ->Q30 : Symbol(Q30, Decl(keyofAndIndexedAccess.ts, 58, 34)) +>Q30 : Symbol(Q30, Decl(keyofAndIndexedAccess.ts, 59, 34)) type Q31 = [string, number][1]; // number ->Q31 : Symbol(Q31, Decl(keyofAndIndexedAccess.ts, 60, 31)) +>Q31 : Symbol(Q31, Decl(keyofAndIndexedAccess.ts, 61, 31)) type Q32 = [string, number][number]; // string | number ->Q32 : Symbol(Q32, Decl(keyofAndIndexedAccess.ts, 61, 31)) +>Q32 : Symbol(Q32, Decl(keyofAndIndexedAccess.ts, 62, 31)) type Q33 = [string, number][E.A]; // string ->Q33 : Symbol(Q33, Decl(keyofAndIndexedAccess.ts, 62, 36)) +>Q33 : Symbol(Q33, Decl(keyofAndIndexedAccess.ts, 63, 36)) >E : Symbol(E, Decl(keyofAndIndexedAccess.ts, 21, 48)) >A : Symbol(E.A, Decl(keyofAndIndexedAccess.ts, 23, 14)) type Q34 = [string, number][E.B]; // number ->Q34 : Symbol(Q34, Decl(keyofAndIndexedAccess.ts, 63, 33)) +>Q34 : Symbol(Q34, Decl(keyofAndIndexedAccess.ts, 64, 33)) >E : Symbol(E, Decl(keyofAndIndexedAccess.ts, 21, 48)) >B : Symbol(E.B, Decl(keyofAndIndexedAccess.ts, 23, 17)) type Q35 = [string, number]["0"]; // string ->Q35 : Symbol(Q35, Decl(keyofAndIndexedAccess.ts, 64, 33)) +>Q35 : Symbol(Q35, Decl(keyofAndIndexedAccess.ts, 65, 33)) type Q36 = [string, number]["1"]; // string ->Q36 : Symbol(Q36, Decl(keyofAndIndexedAccess.ts, 65, 33)) +>Q36 : Symbol(Q36, Decl(keyofAndIndexedAccess.ts, 66, 33)) type Q40 = (Shape | Options)["visible"]; // boolean | "yes" | "no" ->Q40 : Symbol(Q40, Decl(keyofAndIndexedAccess.ts, 66, 33)) +>Q40 : Symbol(Q40, Decl(keyofAndIndexedAccess.ts, 67, 33)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) >Options : Symbol(Options, Decl(keyofAndIndexedAccess.ts, 14, 1)) type Q41 = (Shape & Options)["visible"]; // true & "yes" | true & "no" | false & "yes" | false & "no" ->Q41 : Symbol(Q41, Decl(keyofAndIndexedAccess.ts, 68, 40)) +>Q41 : Symbol(Q41, Decl(keyofAndIndexedAccess.ts, 69, 40)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) >Options : Symbol(Options, Decl(keyofAndIndexedAccess.ts, 14, 1)) type Q50 = Dictionary["howdy"]; // Shape ->Q50 : Symbol(Q50, Decl(keyofAndIndexedAccess.ts, 69, 40)) +>Q50 : Symbol(Q50, Decl(keyofAndIndexedAccess.ts, 70, 40)) >Dictionary : Symbol(Dictionary, Decl(keyofAndIndexedAccess.ts, 18, 1)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) type Q51 = Dictionary[123]; // Shape ->Q51 : Symbol(Q51, Decl(keyofAndIndexedAccess.ts, 71, 38)) +>Q51 : Symbol(Q51, Decl(keyofAndIndexedAccess.ts, 72, 38)) >Dictionary : Symbol(Dictionary, Decl(keyofAndIndexedAccess.ts, 18, 1)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) type Q52 = Dictionary[E.B]; // Shape ->Q52 : Symbol(Q52, Decl(keyofAndIndexedAccess.ts, 72, 34)) +>Q52 : Symbol(Q52, Decl(keyofAndIndexedAccess.ts, 73, 34)) >Dictionary : Symbol(Dictionary, Decl(keyofAndIndexedAccess.ts, 18, 1)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) >E : Symbol(E, Decl(keyofAndIndexedAccess.ts, 21, 48)) >B : Symbol(E.B, Decl(keyofAndIndexedAccess.ts, 23, 17)) declare let cond: boolean; ->cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 75, 11)) +>cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 76, 11)) function getProperty(obj: T, key: K) { ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 77, 21)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 77, 23)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 77, 21)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 77, 43)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 77, 21)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 77, 50)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 77, 23)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 78, 21)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 78, 23)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 78, 21)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 78, 43)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 78, 21)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 78, 50)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 78, 23)) return obj[key]; ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 77, 43)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 77, 50)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 78, 43)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 78, 50)) } function setProperty(obj: T, key: K, value: T[K]) { ->setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 79, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 81, 21)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 81, 23)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 81, 21)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 81, 43)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 81, 21)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 81, 50)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 81, 23)) ->value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 81, 58)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 81, 21)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 81, 23)) +>setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 80, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 82, 21)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 82, 23)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 82, 21)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 82, 43)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 82, 21)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 82, 50)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 82, 23)) +>value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 82, 58)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 82, 21)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 82, 23)) obj[key] = value; ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 81, 43)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 81, 50)) ->value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 81, 58)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 82, 43)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 82, 50)) +>value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 82, 58)) } function f10(shape: Shape) { ->f10 : Symbol(f10, Decl(keyofAndIndexedAccess.ts, 83, 1)) ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 85, 13)) +>f10 : Symbol(f10, Decl(keyofAndIndexedAccess.ts, 84, 1)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 86, 13)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) let name = getProperty(shape, "name"); // string ->name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 86, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 85, 13)) +>name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 87, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 86, 13)) let widthOrHeight = getProperty(shape, cond ? "width" : "height"); // number ->widthOrHeight : Symbol(widthOrHeight, Decl(keyofAndIndexedAccess.ts, 87, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 85, 13)) ->cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 75, 11)) +>widthOrHeight : Symbol(widthOrHeight, Decl(keyofAndIndexedAccess.ts, 88, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 86, 13)) +>cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 76, 11)) let nameOrVisible = getProperty(shape, cond ? "name" : "visible"); // string | boolean ->nameOrVisible : Symbol(nameOrVisible, Decl(keyofAndIndexedAccess.ts, 88, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 85, 13)) ->cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 75, 11)) +>nameOrVisible : Symbol(nameOrVisible, Decl(keyofAndIndexedAccess.ts, 89, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 86, 13)) +>cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 76, 11)) setProperty(shape, "name", "rectangle"); ->setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 79, 1)) ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 85, 13)) +>setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 80, 1)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 86, 13)) setProperty(shape, cond ? "width" : "height", 10); ->setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 79, 1)) ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 85, 13)) ->cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 75, 11)) +>setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 80, 1)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 86, 13)) +>cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 76, 11)) setProperty(shape, cond ? "name" : "visible", true); // Technically not safe ->setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 79, 1)) ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 85, 13)) ->cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 75, 11)) +>setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 80, 1)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 86, 13)) +>cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 76, 11)) } function f11(a: Shape[]) { ->f11 : Symbol(f11, Decl(keyofAndIndexedAccess.ts, 92, 1)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 94, 13)) +>f11 : Symbol(f11, Decl(keyofAndIndexedAccess.ts, 93, 1)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 95, 13)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) let len = getProperty(a, "length"); // number ->len : Symbol(len, Decl(keyofAndIndexedAccess.ts, 95, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 94, 13)) +>len : Symbol(len, Decl(keyofAndIndexedAccess.ts, 96, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 95, 13)) setProperty(a, "length", len); ->setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 79, 1)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 94, 13)) ->len : Symbol(len, Decl(keyofAndIndexedAccess.ts, 95, 7)) +>setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 80, 1)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 95, 13)) +>len : Symbol(len, Decl(keyofAndIndexedAccess.ts, 96, 7)) } function f12(t: [Shape, boolean]) { ->f12 : Symbol(f12, Decl(keyofAndIndexedAccess.ts, 97, 1)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 99, 13)) +>f12 : Symbol(f12, Decl(keyofAndIndexedAccess.ts, 98, 1)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 100, 13)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) let len = getProperty(t, "length"); ->len : Symbol(len, Decl(keyofAndIndexedAccess.ts, 100, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 99, 13)) +>len : Symbol(len, Decl(keyofAndIndexedAccess.ts, 101, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 100, 13)) let s2 = getProperty(t, "0"); // Shape ->s2 : Symbol(s2, Decl(keyofAndIndexedAccess.ts, 101, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 99, 13)) +>s2 : Symbol(s2, Decl(keyofAndIndexedAccess.ts, 102, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 100, 13)) let b2 = getProperty(t, "1"); // boolean ->b2 : Symbol(b2, Decl(keyofAndIndexedAccess.ts, 102, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 99, 13)) +>b2 : Symbol(b2, Decl(keyofAndIndexedAccess.ts, 103, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 100, 13)) } function f13(foo: any, bar: any) { ->f13 : Symbol(f13, Decl(keyofAndIndexedAccess.ts, 103, 1)) ->foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 105, 13)) ->bar : Symbol(bar, Decl(keyofAndIndexedAccess.ts, 105, 22)) +>f13 : Symbol(f13, Decl(keyofAndIndexedAccess.ts, 104, 1)) +>foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 106, 13)) +>bar : Symbol(bar, Decl(keyofAndIndexedAccess.ts, 106, 22)) let x = getProperty(foo, "x"); // any ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 106, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 105, 13)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 107, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 106, 13)) let y = getProperty(foo, "100"); // any ->y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 107, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 105, 13)) +>y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 108, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 106, 13)) let z = getProperty(foo, bar); // any ->z : Symbol(z, Decl(keyofAndIndexedAccess.ts, 108, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 105, 13)) ->bar : Symbol(bar, Decl(keyofAndIndexedAccess.ts, 105, 22)) +>z : Symbol(z, Decl(keyofAndIndexedAccess.ts, 109, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 106, 13)) +>bar : Symbol(bar, Decl(keyofAndIndexedAccess.ts, 106, 22)) } class Component { ->Component : Symbol(Component, Decl(keyofAndIndexedAccess.ts, 109, 1)) ->PropType : Symbol(PropType, Decl(keyofAndIndexedAccess.ts, 111, 16)) +>Component : Symbol(Component, Decl(keyofAndIndexedAccess.ts, 110, 1)) +>PropType : Symbol(PropType, Decl(keyofAndIndexedAccess.ts, 112, 16)) props: PropType; ->props : Symbol(Component.props, Decl(keyofAndIndexedAccess.ts, 111, 27)) ->PropType : Symbol(PropType, Decl(keyofAndIndexedAccess.ts, 111, 16)) +>props : Symbol(Component.props, Decl(keyofAndIndexedAccess.ts, 112, 27)) +>PropType : Symbol(PropType, Decl(keyofAndIndexedAccess.ts, 112, 16)) getProperty(key: K) { ->getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 112, 20)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 113, 16)) ->PropType : Symbol(PropType, Decl(keyofAndIndexedAccess.ts, 111, 16)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 113, 42)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 113, 16)) +>getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 113, 20)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 114, 16)) +>PropType : Symbol(PropType, Decl(keyofAndIndexedAccess.ts, 112, 16)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 114, 42)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 114, 16)) return this.props[key]; ->this.props : Symbol(Component.props, Decl(keyofAndIndexedAccess.ts, 111, 27)) ->this : Symbol(Component, Decl(keyofAndIndexedAccess.ts, 109, 1)) ->props : Symbol(Component.props, Decl(keyofAndIndexedAccess.ts, 111, 27)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 113, 42)) +>this.props : Symbol(Component.props, Decl(keyofAndIndexedAccess.ts, 112, 27)) +>this : Symbol(Component, Decl(keyofAndIndexedAccess.ts, 110, 1)) +>props : Symbol(Component.props, Decl(keyofAndIndexedAccess.ts, 112, 27)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 114, 42)) } setProperty(key: K, value: PropType[K]) { ->setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 115, 5)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 116, 16)) ->PropType : Symbol(PropType, Decl(keyofAndIndexedAccess.ts, 111, 16)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 116, 42)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 116, 16)) ->value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 116, 49)) ->PropType : Symbol(PropType, Decl(keyofAndIndexedAccess.ts, 111, 16)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 116, 16)) +>setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 116, 5)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 117, 16)) +>PropType : Symbol(PropType, Decl(keyofAndIndexedAccess.ts, 112, 16)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 117, 42)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 117, 16)) +>value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 117, 49)) +>PropType : Symbol(PropType, Decl(keyofAndIndexedAccess.ts, 112, 16)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 117, 16)) this.props[key] = value; ->this.props : Symbol(Component.props, Decl(keyofAndIndexedAccess.ts, 111, 27)) ->this : Symbol(Component, Decl(keyofAndIndexedAccess.ts, 109, 1)) ->props : Symbol(Component.props, Decl(keyofAndIndexedAccess.ts, 111, 27)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 116, 42)) ->value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 116, 49)) +>this.props : Symbol(Component.props, Decl(keyofAndIndexedAccess.ts, 112, 27)) +>this : Symbol(Component, Decl(keyofAndIndexedAccess.ts, 110, 1)) +>props : Symbol(Component.props, Decl(keyofAndIndexedAccess.ts, 112, 27)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 117, 42)) +>value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 117, 49)) } } function f20(component: Component) { ->f20 : Symbol(f20, Decl(keyofAndIndexedAccess.ts, 119, 1)) ->component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 121, 13)) ->Component : Symbol(Component, Decl(keyofAndIndexedAccess.ts, 109, 1)) +>f20 : Symbol(f20, Decl(keyofAndIndexedAccess.ts, 120, 1)) +>component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 122, 13)) +>Component : Symbol(Component, Decl(keyofAndIndexedAccess.ts, 110, 1)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) let name = component.getProperty("name"); // string ->name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 122, 7)) ->component.getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 112, 20)) ->component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 121, 13)) ->getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 112, 20)) +>name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 123, 7)) +>component.getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 113, 20)) +>component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 122, 13)) +>getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 113, 20)) let widthOrHeight = component.getProperty(cond ? "width" : "height"); // number ->widthOrHeight : Symbol(widthOrHeight, Decl(keyofAndIndexedAccess.ts, 123, 7)) ->component.getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 112, 20)) ->component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 121, 13)) ->getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 112, 20)) ->cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 75, 11)) +>widthOrHeight : Symbol(widthOrHeight, Decl(keyofAndIndexedAccess.ts, 124, 7)) +>component.getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 113, 20)) +>component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 122, 13)) +>getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 113, 20)) +>cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 76, 11)) let nameOrVisible = component.getProperty(cond ? "name" : "visible"); // string | boolean ->nameOrVisible : Symbol(nameOrVisible, Decl(keyofAndIndexedAccess.ts, 124, 7)) ->component.getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 112, 20)) ->component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 121, 13)) ->getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 112, 20)) ->cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 75, 11)) +>nameOrVisible : Symbol(nameOrVisible, Decl(keyofAndIndexedAccess.ts, 125, 7)) +>component.getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 113, 20)) +>component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 122, 13)) +>getProperty : Symbol(Component.getProperty, Decl(keyofAndIndexedAccess.ts, 113, 20)) +>cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 76, 11)) component.setProperty("name", "rectangle"); ->component.setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 115, 5)) ->component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 121, 13)) ->setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 115, 5)) +>component.setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 116, 5)) +>component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 122, 13)) +>setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 116, 5)) component.setProperty(cond ? "width" : "height", 10) ->component.setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 115, 5)) ->component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 121, 13)) ->setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 115, 5)) ->cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 75, 11)) +>component.setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 116, 5)) +>component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 122, 13)) +>setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 116, 5)) +>cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 76, 11)) component.setProperty(cond ? "name" : "visible", true); // Technically not safe ->component.setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 115, 5)) ->component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 121, 13)) ->setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 115, 5)) ->cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 75, 11)) +>component.setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 116, 5)) +>component : Symbol(component, Decl(keyofAndIndexedAccess.ts, 122, 13)) +>setProperty : Symbol(Component.setProperty, Decl(keyofAndIndexedAccess.ts, 116, 5)) +>cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 76, 11)) } function pluck(array: T[], key: K) { ->pluck : Symbol(pluck, Decl(keyofAndIndexedAccess.ts, 128, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 130, 15)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 130, 17)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 130, 15)) ->array : Symbol(array, Decl(keyofAndIndexedAccess.ts, 130, 37)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 130, 15)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 130, 48)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 130, 17)) +>pluck : Symbol(pluck, Decl(keyofAndIndexedAccess.ts, 129, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 131, 15)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 131, 17)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 131, 15)) +>array : Symbol(array, Decl(keyofAndIndexedAccess.ts, 131, 37)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 131, 15)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 131, 48)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 131, 17)) return array.map(x => x[key]); >array.map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) ->array : Symbol(array, Decl(keyofAndIndexedAccess.ts, 130, 37)) +>array : Symbol(array, Decl(keyofAndIndexedAccess.ts, 131, 37)) >map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 131, 21)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 131, 21)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 130, 48)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 132, 21)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 132, 21)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 131, 48)) } function f30(shapes: Shape[]) { ->f30 : Symbol(f30, Decl(keyofAndIndexedAccess.ts, 132, 1)) ->shapes : Symbol(shapes, Decl(keyofAndIndexedAccess.ts, 134, 13)) +>f30 : Symbol(f30, Decl(keyofAndIndexedAccess.ts, 133, 1)) +>shapes : Symbol(shapes, Decl(keyofAndIndexedAccess.ts, 135, 13)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) let names = pluck(shapes, "name"); // string[] ->names : Symbol(names, Decl(keyofAndIndexedAccess.ts, 135, 7)) ->pluck : Symbol(pluck, Decl(keyofAndIndexedAccess.ts, 128, 1)) ->shapes : Symbol(shapes, Decl(keyofAndIndexedAccess.ts, 134, 13)) +>names : Symbol(names, Decl(keyofAndIndexedAccess.ts, 136, 7)) +>pluck : Symbol(pluck, Decl(keyofAndIndexedAccess.ts, 129, 1)) +>shapes : Symbol(shapes, Decl(keyofAndIndexedAccess.ts, 135, 13)) let widths = pluck(shapes, "width"); // number[] ->widths : Symbol(widths, Decl(keyofAndIndexedAccess.ts, 136, 7)) ->pluck : Symbol(pluck, Decl(keyofAndIndexedAccess.ts, 128, 1)) ->shapes : Symbol(shapes, Decl(keyofAndIndexedAccess.ts, 134, 13)) +>widths : Symbol(widths, Decl(keyofAndIndexedAccess.ts, 137, 7)) +>pluck : Symbol(pluck, Decl(keyofAndIndexedAccess.ts, 129, 1)) +>shapes : Symbol(shapes, Decl(keyofAndIndexedAccess.ts, 135, 13)) let nameOrVisibles = pluck(shapes, cond ? "name" : "visible"); // (string | boolean)[] ->nameOrVisibles : Symbol(nameOrVisibles, Decl(keyofAndIndexedAccess.ts, 137, 7)) ->pluck : Symbol(pluck, Decl(keyofAndIndexedAccess.ts, 128, 1)) ->shapes : Symbol(shapes, Decl(keyofAndIndexedAccess.ts, 134, 13)) ->cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 75, 11)) +>nameOrVisibles : Symbol(nameOrVisibles, Decl(keyofAndIndexedAccess.ts, 138, 7)) +>pluck : Symbol(pluck, Decl(keyofAndIndexedAccess.ts, 129, 1)) +>shapes : Symbol(shapes, Decl(keyofAndIndexedAccess.ts, 135, 13)) +>cond : Symbol(cond, Decl(keyofAndIndexedAccess.ts, 76, 11)) } function f31(key: K) { ->f31 : Symbol(f31, Decl(keyofAndIndexedAccess.ts, 138, 1)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 140, 13)) +>f31 : Symbol(f31, Decl(keyofAndIndexedAccess.ts, 139, 1)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 141, 13)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 140, 36)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 140, 13)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 141, 36)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 141, 13)) const shape: Shape = { name: "foo", width: 5, height: 10, visible: true }; ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 141, 9)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 142, 9)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) ->name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 141, 26)) ->width : Symbol(width, Decl(keyofAndIndexedAccess.ts, 141, 39)) ->height : Symbol(height, Decl(keyofAndIndexedAccess.ts, 141, 49)) ->visible : Symbol(visible, Decl(keyofAndIndexedAccess.ts, 141, 61)) +>name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 142, 26)) +>width : Symbol(width, Decl(keyofAndIndexedAccess.ts, 142, 39)) +>height : Symbol(height, Decl(keyofAndIndexedAccess.ts, 142, 49)) +>visible : Symbol(visible, Decl(keyofAndIndexedAccess.ts, 142, 61)) return shape[key]; // Shape[K] ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 141, 9)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 140, 36)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 142, 9)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 141, 36)) } function f32(key: K) { ->f32 : Symbol(f32, Decl(keyofAndIndexedAccess.ts, 143, 1)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 145, 13)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 145, 43)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 145, 13)) +>f32 : Symbol(f32, Decl(keyofAndIndexedAccess.ts, 144, 1)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 146, 13)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 146, 43)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 146, 13)) const shape: Shape = { name: "foo", width: 5, height: 10, visible: true }; ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 146, 9)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 147, 9)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) ->name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 146, 26)) ->width : Symbol(width, Decl(keyofAndIndexedAccess.ts, 146, 39)) ->height : Symbol(height, Decl(keyofAndIndexedAccess.ts, 146, 49)) ->visible : Symbol(visible, Decl(keyofAndIndexedAccess.ts, 146, 61)) +>name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 147, 26)) +>width : Symbol(width, Decl(keyofAndIndexedAccess.ts, 147, 39)) +>height : Symbol(height, Decl(keyofAndIndexedAccess.ts, 147, 49)) +>visible : Symbol(visible, Decl(keyofAndIndexedAccess.ts, 147, 61)) return shape[key]; // Shape[K] ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 146, 9)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 145, 43)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 147, 9)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 146, 43)) } function f33(shape: S, key: K) { ->f33 : Symbol(f33, Decl(keyofAndIndexedAccess.ts, 148, 1)) ->S : Symbol(S, Decl(keyofAndIndexedAccess.ts, 150, 13)) +>f33 : Symbol(f33, Decl(keyofAndIndexedAccess.ts, 149, 1)) +>S : Symbol(S, Decl(keyofAndIndexedAccess.ts, 151, 13)) >Shape : Symbol(Shape, Decl(keyofAndIndexedAccess.ts, 0, 0)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 150, 29)) ->S : Symbol(S, Decl(keyofAndIndexedAccess.ts, 150, 13)) ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 150, 49)) ->S : Symbol(S, Decl(keyofAndIndexedAccess.ts, 150, 13)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 150, 58)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 150, 29)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 151, 29)) +>S : Symbol(S, Decl(keyofAndIndexedAccess.ts, 151, 13)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 151, 49)) +>S : Symbol(S, Decl(keyofAndIndexedAccess.ts, 151, 13)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 151, 58)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 151, 29)) let name = getProperty(shape, "name"); ->name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 151, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 150, 49)) +>name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 152, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 151, 49)) let prop = getProperty(shape, key); ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 152, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 150, 49)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 150, 58)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 153, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>shape : Symbol(shape, Decl(keyofAndIndexedAccess.ts, 151, 49)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 151, 58)) return prop; ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 152, 7)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 153, 7)) } function f34(ts: TaggedShape) { ->f34 : Symbol(f34, Decl(keyofAndIndexedAccess.ts, 154, 1)) ->ts : Symbol(ts, Decl(keyofAndIndexedAccess.ts, 156, 13)) +>f34 : Symbol(f34, Decl(keyofAndIndexedAccess.ts, 155, 1)) +>ts : Symbol(ts, Decl(keyofAndIndexedAccess.ts, 157, 13)) >TaggedShape : Symbol(TaggedShape, Decl(keyofAndIndexedAccess.ts, 5, 1)) let tag1 = f33(ts, "tag"); ->tag1 : Symbol(tag1, Decl(keyofAndIndexedAccess.ts, 157, 7)) ->f33 : Symbol(f33, Decl(keyofAndIndexedAccess.ts, 148, 1)) ->ts : Symbol(ts, Decl(keyofAndIndexedAccess.ts, 156, 13)) +>tag1 : Symbol(tag1, Decl(keyofAndIndexedAccess.ts, 158, 7)) +>f33 : Symbol(f33, Decl(keyofAndIndexedAccess.ts, 149, 1)) +>ts : Symbol(ts, Decl(keyofAndIndexedAccess.ts, 157, 13)) let tag2 = getProperty(ts, "tag"); ->tag2 : Symbol(tag2, Decl(keyofAndIndexedAccess.ts, 158, 7)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->ts : Symbol(ts, Decl(keyofAndIndexedAccess.ts, 156, 13)) +>tag2 : Symbol(tag2, Decl(keyofAndIndexedAccess.ts, 159, 7)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>ts : Symbol(ts, Decl(keyofAndIndexedAccess.ts, 157, 13)) } class C { ->C : Symbol(C, Decl(keyofAndIndexedAccess.ts, 159, 1)) +>C : Symbol(C, Decl(keyofAndIndexedAccess.ts, 160, 1)) public x: string; ->x : Symbol(C.x, Decl(keyofAndIndexedAccess.ts, 161, 9)) +>x : Symbol(C.x, Decl(keyofAndIndexedAccess.ts, 162, 9)) protected y: string; ->y : Symbol(C.y, Decl(keyofAndIndexedAccess.ts, 162, 21)) +>y : Symbol(C.y, Decl(keyofAndIndexedAccess.ts, 163, 21)) private z: string; ->z : Symbol(C.z, Decl(keyofAndIndexedAccess.ts, 163, 24)) +>z : Symbol(C.z, Decl(keyofAndIndexedAccess.ts, 164, 24)) } // Indexed access expressions have always permitted access to private and protected members. // For consistency we also permit such access in indexed access types. function f40(c: C) { ->f40 : Symbol(f40, Decl(keyofAndIndexedAccess.ts, 165, 1)) ->c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 169, 13)) ->C : Symbol(C, Decl(keyofAndIndexedAccess.ts, 159, 1)) +>f40 : Symbol(f40, Decl(keyofAndIndexedAccess.ts, 166, 1)) +>c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 170, 13)) +>C : Symbol(C, Decl(keyofAndIndexedAccess.ts, 160, 1)) type X = C["x"]; ->X : Symbol(X, Decl(keyofAndIndexedAccess.ts, 169, 20)) ->C : Symbol(C, Decl(keyofAndIndexedAccess.ts, 159, 1)) +>X : Symbol(X, Decl(keyofAndIndexedAccess.ts, 170, 20)) +>C : Symbol(C, Decl(keyofAndIndexedAccess.ts, 160, 1)) type Y = C["y"]; ->Y : Symbol(Y, Decl(keyofAndIndexedAccess.ts, 170, 20)) ->C : Symbol(C, Decl(keyofAndIndexedAccess.ts, 159, 1)) +>Y : Symbol(Y, Decl(keyofAndIndexedAccess.ts, 171, 20)) +>C : Symbol(C, Decl(keyofAndIndexedAccess.ts, 160, 1)) type Z = C["z"]; ->Z : Symbol(Z, Decl(keyofAndIndexedAccess.ts, 171, 20)) ->C : Symbol(C, Decl(keyofAndIndexedAccess.ts, 159, 1)) +>Z : Symbol(Z, Decl(keyofAndIndexedAccess.ts, 172, 20)) +>C : Symbol(C, Decl(keyofAndIndexedAccess.ts, 160, 1)) let x: X = c["x"]; ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 173, 7)) ->X : Symbol(X, Decl(keyofAndIndexedAccess.ts, 169, 20)) ->c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 169, 13)) ->"x" : Symbol(C.x, Decl(keyofAndIndexedAccess.ts, 161, 9)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 174, 7)) +>X : Symbol(X, Decl(keyofAndIndexedAccess.ts, 170, 20)) +>c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 170, 13)) +>"x" : Symbol(C.x, Decl(keyofAndIndexedAccess.ts, 162, 9)) let y: Y = c["y"]; ->y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 174, 7)) ->Y : Symbol(Y, Decl(keyofAndIndexedAccess.ts, 170, 20)) ->c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 169, 13)) ->"y" : Symbol(C.y, Decl(keyofAndIndexedAccess.ts, 162, 21)) +>y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 175, 7)) +>Y : Symbol(Y, Decl(keyofAndIndexedAccess.ts, 171, 20)) +>c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 170, 13)) +>"y" : Symbol(C.y, Decl(keyofAndIndexedAccess.ts, 163, 21)) let z: Z = c["z"]; ->z : Symbol(z, Decl(keyofAndIndexedAccess.ts, 175, 7)) ->Z : Symbol(Z, Decl(keyofAndIndexedAccess.ts, 171, 20)) ->c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 169, 13)) ->"z" : Symbol(C.z, Decl(keyofAndIndexedAccess.ts, 163, 24)) +>z : Symbol(z, Decl(keyofAndIndexedAccess.ts, 176, 7)) +>Z : Symbol(Z, Decl(keyofAndIndexedAccess.ts, 172, 20)) +>c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 170, 13)) +>"z" : Symbol(C.z, Decl(keyofAndIndexedAccess.ts, 164, 24)) } function f50(k: keyof T, s: string) { ->f50 : Symbol(f50, Decl(keyofAndIndexedAccess.ts, 176, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 178, 13)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 178, 16)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 178, 13)) ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 178, 27)) +>f50 : Symbol(f50, Decl(keyofAndIndexedAccess.ts, 177, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 179, 13)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 179, 16)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 179, 13)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 179, 27)) const x1 = s as keyof T; ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 179, 9)) ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 178, 27)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 178, 13)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 180, 9)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 179, 27)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 179, 13)) const x2 = k as string; ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 180, 9)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 178, 16)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 181, 9)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 179, 16)) } function f51(k: K, s: string) { ->f51 : Symbol(f51, Decl(keyofAndIndexedAccess.ts, 181, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 183, 13)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 183, 15)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 183, 13)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 183, 35)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 183, 15)) ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 183, 40)) +>f51 : Symbol(f51, Decl(keyofAndIndexedAccess.ts, 182, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 184, 13)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 184, 15)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 184, 13)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 184, 35)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 184, 15)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 184, 40)) const x1 = s as keyof T; ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 184, 9)) ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 183, 40)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 183, 13)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 185, 9)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 184, 40)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 184, 13)) const x2 = k as string; ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 185, 9)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 183, 35)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 186, 9)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 184, 35)) } function f52(obj: { [x: string]: boolean }, k: Exclude, s: string, n: number) { ->f52 : Symbol(f52, Decl(keyofAndIndexedAccess.ts, 186, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 188, 13)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 188, 16)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 188, 24)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 188, 46)) +>f52 : Symbol(f52, Decl(keyofAndIndexedAccess.ts, 187, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 189, 13)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 189, 16)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 189, 24)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 189, 46)) >Exclude : Symbol(Exclude, Decl(lib.es5.d.ts, --, --)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 188, 13)) ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 188, 75)) ->n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 188, 86)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 189, 13)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 189, 75)) +>n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 189, 86)) const x1 = obj[s]; ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 189, 9)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 188, 16)) ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 188, 75)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 190, 9)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 189, 16)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 189, 75)) const x2 = obj[n]; ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 190, 9)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 188, 16)) ->n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 188, 86)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 191, 9)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 189, 16)) +>n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 189, 86)) const x3 = obj[k]; ->x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 191, 9)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 188, 16)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 188, 46)) +>x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 192, 9)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 189, 16)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 189, 46)) } function f53>(obj: { [x: string]: boolean }, k: K, s: string, n: number) { ->f53 : Symbol(f53, Decl(keyofAndIndexedAccess.ts, 192, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 194, 13)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 194, 15)) +>f53 : Symbol(f53, Decl(keyofAndIndexedAccess.ts, 193, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 195, 13)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 195, 15)) >Exclude : Symbol(Exclude, Decl(lib.es5.d.ts, --, --)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 194, 13)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 194, 52)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 194, 60)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 194, 82)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 194, 15)) ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 194, 88)) ->n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 194, 99)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 195, 13)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 195, 52)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 195, 60)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 195, 82)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 195, 15)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 195, 88)) +>n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 195, 99)) const x1 = obj[s]; ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 195, 9)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 194, 52)) ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 194, 88)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 196, 9)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 195, 52)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 195, 88)) const x2 = obj[n]; ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 196, 9)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 194, 52)) ->n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 194, 99)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 197, 9)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 195, 52)) +>n : Symbol(n, Decl(keyofAndIndexedAccess.ts, 195, 99)) const x3 = obj[k]; ->x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 197, 9)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 194, 52)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 194, 82)) +>x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 198, 9)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 195, 52)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 195, 82)) } function f54(obj: T, key: keyof T) { ->f54 : Symbol(f54, Decl(keyofAndIndexedAccess.ts, 198, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 200, 13)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 200, 16)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 200, 13)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 200, 23)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 200, 13)) +>f54 : Symbol(f54, Decl(keyofAndIndexedAccess.ts, 199, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 201, 13)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 201, 16)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 201, 13)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 201, 23)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 201, 13)) for (let s in obj[key]) { ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 201, 12)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 200, 16)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 200, 23)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 202, 12)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 201, 16)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 201, 23)) } const b = "foo" in obj[key]; ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 203, 9)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 200, 16)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 200, 23)) +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 204, 9)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 201, 16)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 201, 23)) } function f55(obj: T, key: K) { ->f55 : Symbol(f55, Decl(keyofAndIndexedAccess.ts, 204, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 206, 13)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 206, 15)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 206, 13)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 206, 35)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 206, 13)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 206, 42)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 206, 15)) +>f55 : Symbol(f55, Decl(keyofAndIndexedAccess.ts, 205, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 207, 13)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 207, 15)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 207, 13)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 207, 35)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 207, 13)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 207, 42)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 207, 15)) for (let s in obj[key]) { ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 207, 12)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 206, 35)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 206, 42)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 208, 12)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 207, 35)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 207, 42)) } const b = "foo" in obj[key]; ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 209, 9)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 206, 35)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 206, 42)) +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 210, 9)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 207, 35)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 207, 42)) } function f60(source: T, target: T) { ->f60 : Symbol(f60, Decl(keyofAndIndexedAccess.ts, 210, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 212, 13)) ->source : Symbol(source, Decl(keyofAndIndexedAccess.ts, 212, 16)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 212, 13)) ->target : Symbol(target, Decl(keyofAndIndexedAccess.ts, 212, 26)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 212, 13)) +>f60 : Symbol(f60, Decl(keyofAndIndexedAccess.ts, 211, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 213, 13)) +>source : Symbol(source, Decl(keyofAndIndexedAccess.ts, 213, 16)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 213, 13)) +>target : Symbol(target, Decl(keyofAndIndexedAccess.ts, 213, 26)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 213, 13)) for (let k in source) { ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 213, 12)) ->source : Symbol(source, Decl(keyofAndIndexedAccess.ts, 212, 16)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 214, 12)) +>source : Symbol(source, Decl(keyofAndIndexedAccess.ts, 213, 16)) target[k] = source[k]; ->target : Symbol(target, Decl(keyofAndIndexedAccess.ts, 212, 26)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 213, 12)) ->source : Symbol(source, Decl(keyofAndIndexedAccess.ts, 212, 16)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 213, 12)) +>target : Symbol(target, Decl(keyofAndIndexedAccess.ts, 213, 26)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 214, 12)) +>source : Symbol(source, Decl(keyofAndIndexedAccess.ts, 213, 16)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 214, 12)) } } function f70(func: (k1: keyof (T | U), k2: keyof (T & U)) => void) { ->f70 : Symbol(f70, Decl(keyofAndIndexedAccess.ts, 216, 1)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 218, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 218, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 218, 22)) ->k1 : Symbol(k1, Decl(keyofAndIndexedAccess.ts, 218, 26)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 218, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 218, 22)) ->k2 : Symbol(k2, Decl(keyofAndIndexedAccess.ts, 218, 44)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 218, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 218, 22)) +>f70 : Symbol(f70, Decl(keyofAndIndexedAccess.ts, 217, 1)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 219, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 219, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 219, 22)) +>k1 : Symbol(k1, Decl(keyofAndIndexedAccess.ts, 219, 26)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 219, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 219, 22)) +>k2 : Symbol(k2, Decl(keyofAndIndexedAccess.ts, 219, 44)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 219, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 219, 22)) func<{ a: any, b: any }, { a: any, c: any }>('a', 'a'); ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 218, 13)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 219, 10)) ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 219, 18)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 219, 30)) ->c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 219, 38)) - - func<{ a: any, b: any }, { a: any, c: any }>('a', 'b'); ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 218, 13)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 219, 13)) >a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 220, 10)) >b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 220, 18)) >a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 220, 30)) >c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 220, 38)) - func<{ a: any, b: any }, { a: any, c: any }>('a', 'c'); ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 218, 13)) + func<{ a: any, b: any }, { a: any, c: any }>('a', 'b'); +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 219, 13)) >a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 221, 10)) >b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 221, 18)) >a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 221, 30)) >c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 221, 38)) + + func<{ a: any, b: any }, { a: any, c: any }>('a', 'c'); +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 219, 13)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 222, 10)) +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 222, 18)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 222, 30)) +>c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 222, 38)) } function f71(func: (x: T, y: U) => Partial) { ->f71 : Symbol(f71, Decl(keyofAndIndexedAccess.ts, 222, 1)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 224, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 224, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 224, 22)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 224, 26)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 224, 20)) ->y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 224, 31)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 224, 22)) +>f71 : Symbol(f71, Decl(keyofAndIndexedAccess.ts, 223, 1)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 225, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 225, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 225, 22)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 225, 26)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 225, 20)) +>y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 225, 31)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 225, 22)) >Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 224, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 224, 22)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 225, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 225, 22)) let x = func({ a: 1, b: "hello" }, { c: true }); ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 225, 7)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 224, 13)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 225, 18)) ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 225, 24)) ->c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 225, 40)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 226, 7)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 225, 13)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 226, 18)) +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 226, 24)) +>c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 226, 40)) x.a; // number | undefined ->x.a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 225, 18)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 225, 7)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 225, 18)) +>x.a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 226, 18)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 226, 7)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 226, 18)) x.b; // string | undefined ->x.b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 225, 24)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 225, 7)) ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 225, 24)) +>x.b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 226, 24)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 226, 7)) +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 226, 24)) x.c; // boolean | undefined ->x.c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 225, 40)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 225, 7)) ->c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 225, 40)) +>x.c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 226, 40)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 226, 7)) +>c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 226, 40)) } function f72(func: (x: T, y: U, k: K) => (T & U)[K]) { ->f72 : Symbol(f72, Decl(keyofAndIndexedAccess.ts, 229, 1)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 231, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 231, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 231, 22)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 231, 25)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 231, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 231, 22)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 231, 55)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 231, 20)) ->y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 231, 60)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 231, 22)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 231, 66)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 231, 25)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 231, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 231, 22)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 231, 25)) +>f72 : Symbol(f72, Decl(keyofAndIndexedAccess.ts, 230, 1)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 232, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 232, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 232, 22)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 232, 25)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 232, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 232, 22)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 232, 55)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 232, 20)) +>y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 232, 60)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 232, 22)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 232, 66)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 232, 25)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 232, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 232, 22)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 232, 25)) let a = func({ a: 1, b: "hello" }, { c: true }, 'a'); // number ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 232, 7)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 231, 13)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 232, 18)) ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 232, 24)) ->c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 232, 40)) - - let b = func({ a: 1, b: "hello" }, { c: true }, 'b'); // string ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 233, 7)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 231, 13)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 233, 7)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 232, 13)) >a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 233, 18)) >b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 233, 24)) >c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 233, 40)) - let c = func({ a: 1, b: "hello" }, { c: true }, 'c'); // boolean ->c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 234, 7)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 231, 13)) + let b = func({ a: 1, b: "hello" }, { c: true }, 'b'); // string +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 234, 7)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 232, 13)) >a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 234, 18)) >b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 234, 24)) >c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 234, 40)) + + let c = func({ a: 1, b: "hello" }, { c: true }, 'c'); // boolean +>c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 235, 7)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 232, 13)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 235, 18)) +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 235, 24)) +>c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 235, 40)) } function f73(func: (x: T, y: U, k: K) => (T & U)[K]) { ->f73 : Symbol(f73, Decl(keyofAndIndexedAccess.ts, 235, 1)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 237, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 237, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 237, 22)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 237, 25)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 237, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 237, 22)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 237, 51)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 237, 20)) ->y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 237, 56)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 237, 22)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 237, 62)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 237, 25)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 237, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 237, 22)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 237, 25)) +>f73 : Symbol(f73, Decl(keyofAndIndexedAccess.ts, 236, 1)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 238, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 238, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 238, 22)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 238, 25)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 238, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 238, 22)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 238, 51)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 238, 20)) +>y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 238, 56)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 238, 22)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 238, 62)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 238, 25)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 238, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 238, 22)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 238, 25)) let a = func({ a: 1, b: "hello" }, { c: true }, 'a'); // number ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 238, 7)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 237, 13)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 238, 18)) ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 238, 24)) ->c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 238, 40)) - - let b = func({ a: 1, b: "hello" }, { c: true }, 'b'); // string ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 239, 7)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 237, 13)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 239, 7)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 238, 13)) >a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 239, 18)) >b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 239, 24)) >c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 239, 40)) - let c = func({ a: 1, b: "hello" }, { c: true }, 'c'); // boolean ->c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 240, 7)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 237, 13)) + let b = func({ a: 1, b: "hello" }, { c: true }, 'b'); // string +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 240, 7)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 238, 13)) >a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 240, 18)) >b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 240, 24)) >c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 240, 40)) + + let c = func({ a: 1, b: "hello" }, { c: true }, 'c'); // boolean +>c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 241, 7)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 238, 13)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 241, 18)) +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 241, 24)) +>c : Symbol(c, Decl(keyofAndIndexedAccess.ts, 241, 40)) } function f74(func: (x: T, y: U, k: K) => (T | U)[K]) { ->f74 : Symbol(f74, Decl(keyofAndIndexedAccess.ts, 241, 1)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 243, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 243, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 243, 22)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 243, 25)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 243, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 243, 22)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 243, 51)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 243, 20)) ->y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 243, 56)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 243, 22)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 243, 62)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 243, 25)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 243, 20)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 243, 22)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 243, 25)) +>f74 : Symbol(f74, Decl(keyofAndIndexedAccess.ts, 242, 1)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 244, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 244, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 244, 22)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 244, 25)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 244, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 244, 22)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 244, 51)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 244, 20)) +>y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 244, 56)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 244, 22)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 244, 62)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 244, 25)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 244, 20)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 244, 22)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 244, 25)) let a = func({ a: 1, b: "hello" }, { a: 2, b: true }, 'a'); // number ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 244, 7)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 243, 13)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 244, 18)) ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 244, 24)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 244, 40)) ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 244, 46)) - - let b = func({ a: 1, b: "hello" }, { a: 2, b: true }, 'b'); // string | boolean ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 245, 7)) ->func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 243, 13)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 245, 7)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 244, 13)) >a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 245, 18)) >b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 245, 24)) >a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 245, 40)) >b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 245, 46)) + + let b = func({ a: 1, b: "hello" }, { a: 2, b: true }, 'b'); // string | boolean +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 246, 7)) +>func : Symbol(func, Decl(keyofAndIndexedAccess.ts, 244, 13)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 246, 18)) +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 246, 24)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 246, 40)) +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 246, 46)) } function f80(obj: T) { ->f80 : Symbol(f80, Decl(keyofAndIndexedAccess.ts, 246, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 248, 13)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 248, 24)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 248, 29)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 248, 42)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 248, 13)) +>f80 : Symbol(f80, Decl(keyofAndIndexedAccess.ts, 247, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 249, 13)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 249, 24)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 249, 29)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 249, 42)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 249, 13)) let a1 = obj.a; // { x: any } ->a1 : Symbol(a1, Decl(keyofAndIndexedAccess.ts, 249, 7)) ->obj.a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 248, 24)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 248, 42)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 248, 24)) +>a1 : Symbol(a1, Decl(keyofAndIndexedAccess.ts, 250, 7)) +>obj.a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 249, 24)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 249, 42)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 249, 24)) let a2 = obj['a']; // { x: any } ->a2 : Symbol(a2, Decl(keyofAndIndexedAccess.ts, 250, 7)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 248, 42)) ->'a' : Symbol(a, Decl(keyofAndIndexedAccess.ts, 248, 24)) +>a2 : Symbol(a2, Decl(keyofAndIndexedAccess.ts, 251, 7)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 249, 42)) +>'a' : Symbol(a, Decl(keyofAndIndexedAccess.ts, 249, 24)) let a3 = obj['a'] as T['a']; // T["a"] ->a3 : Symbol(a3, Decl(keyofAndIndexedAccess.ts, 251, 7)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 248, 42)) ->'a' : Symbol(a, Decl(keyofAndIndexedAccess.ts, 248, 24)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 248, 13)) +>a3 : Symbol(a3, Decl(keyofAndIndexedAccess.ts, 252, 7)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 249, 42)) +>'a' : Symbol(a, Decl(keyofAndIndexedAccess.ts, 249, 24)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 249, 13)) let x1 = obj.a.x; // any ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 252, 7)) ->obj.a.x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 248, 29)) ->obj.a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 248, 24)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 248, 42)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 248, 24)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 248, 29)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 253, 7)) +>obj.a.x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 249, 29)) +>obj.a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 249, 24)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 249, 42)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 249, 24)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 249, 29)) let x2 = obj['a']['x']; // any ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 253, 7)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 248, 42)) ->'a' : Symbol(a, Decl(keyofAndIndexedAccess.ts, 248, 24)) ->'x' : Symbol(x, Decl(keyofAndIndexedAccess.ts, 248, 29)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 254, 7)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 249, 42)) +>'a' : Symbol(a, Decl(keyofAndIndexedAccess.ts, 249, 24)) +>'x' : Symbol(x, Decl(keyofAndIndexedAccess.ts, 249, 29)) let x3 = obj['a']['x'] as T['a']['x']; // T["a"]["x"] ->x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 254, 7)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 248, 42)) ->'a' : Symbol(a, Decl(keyofAndIndexedAccess.ts, 248, 24)) ->'x' : Symbol(x, Decl(keyofAndIndexedAccess.ts, 248, 29)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 248, 13)) +>x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 255, 7)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 249, 42)) +>'a' : Symbol(a, Decl(keyofAndIndexedAccess.ts, 249, 24)) +>'x' : Symbol(x, Decl(keyofAndIndexedAccess.ts, 249, 29)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 249, 13)) } function f81(obj: T) { ->f81 : Symbol(f81, Decl(keyofAndIndexedAccess.ts, 255, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 257, 13)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 257, 24)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 257, 29)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 257, 42)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 257, 13)) +>f81 : Symbol(f81, Decl(keyofAndIndexedAccess.ts, 256, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 258, 13)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 258, 24)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 258, 29)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 258, 42)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 258, 13)) return obj['a']['x'] as T['a']['x']; ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 257, 42)) ->'a' : Symbol(a, Decl(keyofAndIndexedAccess.ts, 257, 24)) ->'x' : Symbol(x, Decl(keyofAndIndexedAccess.ts, 257, 29)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 257, 13)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 258, 42)) +>'a' : Symbol(a, Decl(keyofAndIndexedAccess.ts, 258, 24)) +>'x' : Symbol(x, Decl(keyofAndIndexedAccess.ts, 258, 29)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 258, 13)) } function f82() { ->f82 : Symbol(f82, Decl(keyofAndIndexedAccess.ts, 259, 1)) +>f82 : Symbol(f82, Decl(keyofAndIndexedAccess.ts, 260, 1)) let x1 = f81({ a: { x: "hello" } }); // string ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 262, 7)) ->f81 : Symbol(f81, Decl(keyofAndIndexedAccess.ts, 255, 1)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 262, 18)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 262, 23)) - - let x2 = f81({ a: { x: 42 } }); // number ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 263, 7)) ->f81 : Symbol(f81, Decl(keyofAndIndexedAccess.ts, 255, 1)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 263, 7)) +>f81 : Symbol(f81, Decl(keyofAndIndexedAccess.ts, 256, 1)) >a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 263, 18)) >x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 263, 23)) + + let x2 = f81({ a: { x: 42 } }); // number +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 264, 7)) +>f81 : Symbol(f81, Decl(keyofAndIndexedAccess.ts, 256, 1)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 264, 18)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 264, 23)) } function f83(obj: T, key: K) { ->f83 : Symbol(f83, Decl(keyofAndIndexedAccess.ts, 264, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 266, 13)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 266, 26)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 266, 39)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 266, 51)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 266, 13)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 266, 71)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 266, 13)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 266, 78)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 266, 51)) +>f83 : Symbol(f83, Decl(keyofAndIndexedAccess.ts, 265, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 267, 13)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 267, 26)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 267, 39)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 267, 51)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 267, 13)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 267, 71)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 267, 13)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 267, 78)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 267, 51)) return obj[key]['x'] as T[K]['x']; ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 266, 71)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 266, 78)) ->'x' : Symbol(x, Decl(keyofAndIndexedAccess.ts, 266, 39)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 266, 13)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 266, 51)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 267, 71)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 267, 78)) +>'x' : Symbol(x, Decl(keyofAndIndexedAccess.ts, 267, 39)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 267, 13)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 267, 51)) } function f84() { ->f84 : Symbol(f84, Decl(keyofAndIndexedAccess.ts, 268, 1)) +>f84 : Symbol(f84, Decl(keyofAndIndexedAccess.ts, 269, 1)) let x1 = f83({ foo: { x: "hello" } }, "foo"); // string ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 271, 7)) ->f83 : Symbol(f83, Decl(keyofAndIndexedAccess.ts, 264, 1)) ->foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 271, 18)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 271, 25)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 272, 7)) +>f83 : Symbol(f83, Decl(keyofAndIndexedAccess.ts, 265, 1)) +>foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 272, 18)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 272, 25)) let x2 = f83({ bar: { x: 42 } }, "bar"); // number ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 272, 7)) ->f83 : Symbol(f83, Decl(keyofAndIndexedAccess.ts, 264, 1)) ->bar : Symbol(bar, Decl(keyofAndIndexedAccess.ts, 272, 18)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 272, 25)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 273, 7)) +>f83 : Symbol(f83, Decl(keyofAndIndexedAccess.ts, 265, 1)) +>bar : Symbol(bar, Decl(keyofAndIndexedAccess.ts, 273, 18)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 273, 25)) } class C1 { ->C1 : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 273, 1)) +>C1 : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 274, 1)) x: number; ->x : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 275, 10)) +>x : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 276, 10)) get(key: K) { ->get : Symbol(C1.get, Decl(keyofAndIndexedAccess.ts, 276, 14)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 277, 8)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 277, 30)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 277, 8)) +>get : Symbol(C1.get, Decl(keyofAndIndexedAccess.ts, 277, 14)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 278, 8)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 278, 30)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 278, 8)) return this[key]; ->this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 273, 1)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 277, 30)) +>this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 274, 1)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 278, 30)) } set(key: K, value: this[K]) { ->set : Symbol(C1.set, Decl(keyofAndIndexedAccess.ts, 279, 5)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 280, 8)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 280, 30)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 280, 8)) ->value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 280, 37)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 280, 8)) +>set : Symbol(C1.set, Decl(keyofAndIndexedAccess.ts, 280, 5)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 281, 8)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 281, 30)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 281, 8)) +>value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 281, 37)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 281, 8)) this[key] = value; ->this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 273, 1)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 280, 30)) ->value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 280, 37)) +>this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 274, 1)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 281, 30)) +>value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 281, 37)) } foo() { ->foo : Symbol(C1.foo, Decl(keyofAndIndexedAccess.ts, 282, 5)) +>foo : Symbol(C1.foo, Decl(keyofAndIndexedAccess.ts, 283, 5)) let x1 = this.x; // number ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 284, 11)) ->this.x : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 275, 10)) ->this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 273, 1)) ->x : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 275, 10)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 285, 11)) +>this.x : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 276, 10)) +>this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 274, 1)) +>x : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 276, 10)) let x2 = this["x"]; // number ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 285, 11)) ->this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 273, 1)) ->"x" : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 275, 10)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 286, 11)) +>this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 274, 1)) +>"x" : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 276, 10)) let x3 = this.get("x"); // this["x"] ->x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 286, 11)) ->this.get : Symbol(C1.get, Decl(keyofAndIndexedAccess.ts, 276, 14)) ->this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 273, 1)) ->get : Symbol(C1.get, Decl(keyofAndIndexedAccess.ts, 276, 14)) +>x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 287, 11)) +>this.get : Symbol(C1.get, Decl(keyofAndIndexedAccess.ts, 277, 14)) +>this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 274, 1)) +>get : Symbol(C1.get, Decl(keyofAndIndexedAccess.ts, 277, 14)) let x4 = getProperty(this, "x"); // this["x"] ->x4 : Symbol(x4, Decl(keyofAndIndexedAccess.ts, 287, 11)) ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 273, 1)) +>x4 : Symbol(x4, Decl(keyofAndIndexedAccess.ts, 288, 11)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 274, 1)) this.x = 42; ->this.x : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 275, 10)) ->this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 273, 1)) ->x : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 275, 10)) +>this.x : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 276, 10)) +>this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 274, 1)) +>x : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 276, 10)) this["x"] = 42; ->this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 273, 1)) ->"x" : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 275, 10)) +>this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 274, 1)) +>"x" : Symbol(C1.x, Decl(keyofAndIndexedAccess.ts, 276, 10)) this.set("x", 42); ->this.set : Symbol(C1.set, Decl(keyofAndIndexedAccess.ts, 279, 5)) ->this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 273, 1)) ->set : Symbol(C1.set, Decl(keyofAndIndexedAccess.ts, 279, 5)) +>this.set : Symbol(C1.set, Decl(keyofAndIndexedAccess.ts, 280, 5)) +>this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 274, 1)) +>set : Symbol(C1.set, Decl(keyofAndIndexedAccess.ts, 280, 5)) setProperty(this, "x", 42); ->setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 79, 1)) ->this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 273, 1)) +>setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 80, 1)) +>this : Symbol(C1, Decl(keyofAndIndexedAccess.ts, 274, 1)) } } type S2 = { ->S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 293, 1)) +>S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 294, 1)) a: string; ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 295, 11)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 296, 11)) b: string; ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 296, 14)) +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 297, 14)) }; function f90(x1: S2[keyof S2], x2: T[keyof S2], x3: S2[K]) { ->f90 : Symbol(f90, Decl(keyofAndIndexedAccess.ts, 298, 2)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 300, 13)) ->S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 293, 1)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 300, 26)) ->S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 293, 1)) ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 300, 47)) ->S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 293, 1)) ->S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 293, 1)) ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 300, 64)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 300, 13)) ->S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 293, 1)) ->x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 300, 81)) ->S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 293, 1)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 300, 26)) +>f90 : Symbol(f90, Decl(keyofAndIndexedAccess.ts, 299, 2)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 301, 13)) +>S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 294, 1)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 301, 26)) +>S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 294, 1)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 301, 47)) +>S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 294, 1)) +>S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 294, 1)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 301, 64)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 301, 13)) +>S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 294, 1)) +>x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 301, 81)) +>S2 : Symbol(S2, Decl(keyofAndIndexedAccess.ts, 294, 1)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 301, 26)) x1 = x2; ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 300, 47)) ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 300, 64)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 301, 47)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 301, 64)) x1 = x3; ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 300, 47)) ->x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 300, 81)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 301, 47)) +>x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 301, 81)) x2 = x1; ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 300, 64)) ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 300, 47)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 301, 64)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 301, 47)) x2 = x3; ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 300, 64)) ->x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 300, 81)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 301, 64)) +>x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 301, 81)) x3 = x1; ->x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 300, 81)) ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 300, 47)) +>x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 301, 81)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 301, 47)) x3 = x2; ->x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 300, 81)) ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 300, 64)) +>x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 301, 81)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 301, 64)) x1.length; >x1.length : Symbol(String.length, Decl(lib.es5.d.ts, --, --)) ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 300, 47)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 301, 47)) >length : Symbol(String.length, Decl(lib.es5.d.ts, --, --)) x2.length; >x2.length : Symbol(String.length, Decl(lib.es5.d.ts, --, --)) ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 300, 64)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 301, 64)) >length : Symbol(String.length, Decl(lib.es5.d.ts, --, --)) x3.length; >x3.length : Symbol(String.length, Decl(lib.es5.d.ts, --, --)) ->x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 300, 81)) +>x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 301, 81)) >length : Symbol(String.length, Decl(lib.es5.d.ts, --, --)) } function f91(x: T, y: T[keyof T], z: T[K]) { ->f91 : Symbol(f91, Decl(keyofAndIndexedAccess.ts, 310, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 312, 13)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 312, 15)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 312, 13)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 312, 35)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 312, 13)) ->y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 312, 40)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 312, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 312, 13)) ->z : Symbol(z, Decl(keyofAndIndexedAccess.ts, 312, 55)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 312, 13)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 312, 15)) +>f91 : Symbol(f91, Decl(keyofAndIndexedAccess.ts, 311, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 313, 13)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 313, 15)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 313, 13)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 313, 35)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 313, 13)) +>y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 313, 40)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 313, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 313, 13)) +>z : Symbol(z, Decl(keyofAndIndexedAccess.ts, 313, 55)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 313, 13)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 313, 15)) let a: {}; ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 313, 7)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 314, 7)) a = x; ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 313, 7)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 312, 35)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 314, 7)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 313, 35)) a = y; ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 313, 7)) ->y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 312, 40)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 314, 7)) +>y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 313, 40)) a = z; ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 313, 7)) ->z : Symbol(z, Decl(keyofAndIndexedAccess.ts, 312, 55)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 314, 7)) +>z : Symbol(z, Decl(keyofAndIndexedAccess.ts, 313, 55)) } function f92(x: T, y: T[keyof T], z: T[K]) { ->f92 : Symbol(f92, Decl(keyofAndIndexedAccess.ts, 317, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 319, 13)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 319, 15)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 319, 13)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 319, 35)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 319, 13)) ->y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 319, 40)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 319, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 319, 13)) ->z : Symbol(z, Decl(keyofAndIndexedAccess.ts, 319, 55)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 319, 13)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 319, 15)) +>f92 : Symbol(f92, Decl(keyofAndIndexedAccess.ts, 318, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 320, 13)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 320, 15)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 320, 13)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 320, 35)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 320, 13)) +>y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 320, 40)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 320, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 320, 13)) +>z : Symbol(z, Decl(keyofAndIndexedAccess.ts, 320, 55)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 320, 13)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 320, 15)) let a: {} | null | undefined; ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 320, 7)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 321, 7)) a = x; ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 320, 7)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 319, 35)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 321, 7)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 320, 35)) a = y; ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 320, 7)) ->y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 319, 40)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 321, 7)) +>y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 320, 40)) a = z; ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 320, 7)) ->z : Symbol(z, Decl(keyofAndIndexedAccess.ts, 319, 55)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 321, 7)) +>z : Symbol(z, Decl(keyofAndIndexedAccess.ts, 320, 55)) } // Repros from #12011 class Base { ->Base : Symbol(Base, Decl(keyofAndIndexedAccess.ts, 324, 1)) +>Base : Symbol(Base, Decl(keyofAndIndexedAccess.ts, 325, 1)) get(prop: K) { ->get : Symbol(Base.get, Decl(keyofAndIndexedAccess.ts, 328, 12)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 329, 8)) ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 329, 30)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 329, 8)) +>get : Symbol(Base.get, Decl(keyofAndIndexedAccess.ts, 329, 12)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 330, 8)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 330, 30)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 330, 8)) return this[prop]; ->this : Symbol(Base, Decl(keyofAndIndexedAccess.ts, 324, 1)) ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 329, 30)) +>this : Symbol(Base, Decl(keyofAndIndexedAccess.ts, 325, 1)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 330, 30)) } set(prop: K, value: this[K]) { ->set : Symbol(Base.set, Decl(keyofAndIndexedAccess.ts, 331, 5)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 332, 8)) ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 332, 30)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 332, 8)) ->value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 332, 38)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 332, 8)) +>set : Symbol(Base.set, Decl(keyofAndIndexedAccess.ts, 332, 5)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 333, 8)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 333, 30)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 333, 8)) +>value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 333, 38)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 333, 8)) this[prop] = value; ->this : Symbol(Base, Decl(keyofAndIndexedAccess.ts, 324, 1)) ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 332, 30)) ->value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 332, 38)) +>this : Symbol(Base, Decl(keyofAndIndexedAccess.ts, 325, 1)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 333, 30)) +>value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 333, 38)) } } class Person extends Base { ->Person : Symbol(Person, Decl(keyofAndIndexedAccess.ts, 335, 1)) ->Base : Symbol(Base, Decl(keyofAndIndexedAccess.ts, 324, 1)) +>Person : Symbol(Person, Decl(keyofAndIndexedAccess.ts, 336, 1)) +>Base : Symbol(Base, Decl(keyofAndIndexedAccess.ts, 325, 1)) parts: number; ->parts : Symbol(Person.parts, Decl(keyofAndIndexedAccess.ts, 337, 27)) +>parts : Symbol(Person.parts, Decl(keyofAndIndexedAccess.ts, 338, 27)) constructor(parts: number) { ->parts : Symbol(parts, Decl(keyofAndIndexedAccess.ts, 339, 16)) +>parts : Symbol(parts, Decl(keyofAndIndexedAccess.ts, 340, 16)) super(); ->super : Symbol(Base, Decl(keyofAndIndexedAccess.ts, 324, 1)) +>super : Symbol(Base, Decl(keyofAndIndexedAccess.ts, 325, 1)) this.set("parts", parts); ->this.set : Symbol(Base.set, Decl(keyofAndIndexedAccess.ts, 331, 5)) ->this : Symbol(Person, Decl(keyofAndIndexedAccess.ts, 335, 1)) ->set : Symbol(Base.set, Decl(keyofAndIndexedAccess.ts, 331, 5)) ->parts : Symbol(parts, Decl(keyofAndIndexedAccess.ts, 339, 16)) +>this.set : Symbol(Base.set, Decl(keyofAndIndexedAccess.ts, 332, 5)) +>this : Symbol(Person, Decl(keyofAndIndexedAccess.ts, 336, 1)) +>set : Symbol(Base.set, Decl(keyofAndIndexedAccess.ts, 332, 5)) +>parts : Symbol(parts, Decl(keyofAndIndexedAccess.ts, 340, 16)) } getParts() { ->getParts : Symbol(Person.getParts, Decl(keyofAndIndexedAccess.ts, 342, 5)) +>getParts : Symbol(Person.getParts, Decl(keyofAndIndexedAccess.ts, 343, 5)) return this.get("parts") ->this.get : Symbol(Base.get, Decl(keyofAndIndexedAccess.ts, 328, 12)) ->this : Symbol(Person, Decl(keyofAndIndexedAccess.ts, 335, 1)) ->get : Symbol(Base.get, Decl(keyofAndIndexedAccess.ts, 328, 12)) +>this.get : Symbol(Base.get, Decl(keyofAndIndexedAccess.ts, 329, 12)) +>this : Symbol(Person, Decl(keyofAndIndexedAccess.ts, 336, 1)) +>get : Symbol(Base.get, Decl(keyofAndIndexedAccess.ts, 329, 12)) } } class OtherPerson { ->OtherPerson : Symbol(OtherPerson, Decl(keyofAndIndexedAccess.ts, 346, 1)) +>OtherPerson : Symbol(OtherPerson, Decl(keyofAndIndexedAccess.ts, 347, 1)) parts: number; ->parts : Symbol(OtherPerson.parts, Decl(keyofAndIndexedAccess.ts, 348, 19)) +>parts : Symbol(OtherPerson.parts, Decl(keyofAndIndexedAccess.ts, 349, 19)) constructor(parts: number) { ->parts : Symbol(parts, Decl(keyofAndIndexedAccess.ts, 350, 16)) +>parts : Symbol(parts, Decl(keyofAndIndexedAccess.ts, 351, 16)) setProperty(this, "parts", parts); ->setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 79, 1)) ->this : Symbol(OtherPerson, Decl(keyofAndIndexedAccess.ts, 346, 1)) ->parts : Symbol(parts, Decl(keyofAndIndexedAccess.ts, 350, 16)) +>setProperty : Symbol(setProperty, Decl(keyofAndIndexedAccess.ts, 80, 1)) +>this : Symbol(OtherPerson, Decl(keyofAndIndexedAccess.ts, 347, 1)) +>parts : Symbol(parts, Decl(keyofAndIndexedAccess.ts, 351, 16)) } getParts() { ->getParts : Symbol(OtherPerson.getParts, Decl(keyofAndIndexedAccess.ts, 352, 5)) +>getParts : Symbol(OtherPerson.getParts, Decl(keyofAndIndexedAccess.ts, 353, 5)) return getProperty(this, "parts") ->getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 75, 26)) ->this : Symbol(OtherPerson, Decl(keyofAndIndexedAccess.ts, 346, 1)) +>getProperty : Symbol(getProperty, Decl(keyofAndIndexedAccess.ts, 76, 26)) +>this : Symbol(OtherPerson, Decl(keyofAndIndexedAccess.ts, 347, 1)) } } // Modified repro from #12544 function path(obj: T, key1: K1): T[K1]; ->path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 356, 1), Decl(keyofAndIndexedAccess.ts, 360, 62), Decl(keyofAndIndexedAccess.ts, 361, 100), Decl(keyofAndIndexedAccess.ts, 362, 142), Decl(keyofAndIndexedAccess.ts, 363, 59)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 360, 14)) ->K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 360, 16)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 360, 14)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 360, 37)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 360, 14)) ->key1 : Symbol(key1, Decl(keyofAndIndexedAccess.ts, 360, 44)) ->K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 360, 16)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 360, 14)) ->K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 360, 16)) - -function path(obj: T, key1: K1, key2: K2): T[K1][K2]; ->path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 356, 1), Decl(keyofAndIndexedAccess.ts, 360, 62), Decl(keyofAndIndexedAccess.ts, 361, 100), Decl(keyofAndIndexedAccess.ts, 362, 142), Decl(keyofAndIndexedAccess.ts, 363, 59)) +>path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 357, 1), Decl(keyofAndIndexedAccess.ts, 361, 62), Decl(keyofAndIndexedAccess.ts, 362, 100), Decl(keyofAndIndexedAccess.ts, 363, 142), Decl(keyofAndIndexedAccess.ts, 364, 59)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 361, 14)) >K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 361, 16)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 361, 14)) ->K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 361, 36)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 361, 14)) ->K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 361, 16)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 361, 61)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 361, 37)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 361, 14)) ->key1 : Symbol(key1, Decl(keyofAndIndexedAccess.ts, 361, 68)) +>key1 : Symbol(key1, Decl(keyofAndIndexedAccess.ts, 361, 44)) >K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 361, 16)) ->key2 : Symbol(key2, Decl(keyofAndIndexedAccess.ts, 361, 78)) ->K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 361, 36)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 361, 14)) >K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 361, 16)) ->K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 361, 36)) -function path(obj: T, key1: K1, key2: K2, key3: K3): T[K1][K2][K3]; ->path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 356, 1), Decl(keyofAndIndexedAccess.ts, 360, 62), Decl(keyofAndIndexedAccess.ts, 361, 100), Decl(keyofAndIndexedAccess.ts, 362, 142), Decl(keyofAndIndexedAccess.ts, 363, 59)) +function path(obj: T, key1: K1, key2: K2): T[K1][K2]; +>path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 357, 1), Decl(keyofAndIndexedAccess.ts, 361, 62), Decl(keyofAndIndexedAccess.ts, 362, 100), Decl(keyofAndIndexedAccess.ts, 363, 142), Decl(keyofAndIndexedAccess.ts, 364, 59)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 362, 14)) >K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 362, 16)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 362, 14)) >K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 362, 36)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 362, 14)) >K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 362, 16)) ->K3 : Symbol(K3, Decl(keyofAndIndexedAccess.ts, 362, 60)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 362, 14)) ->K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 362, 16)) ->K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 362, 36)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 362, 89)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 362, 61)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 362, 14)) ->key1 : Symbol(key1, Decl(keyofAndIndexedAccess.ts, 362, 96)) +>key1 : Symbol(key1, Decl(keyofAndIndexedAccess.ts, 362, 68)) >K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 362, 16)) ->key2 : Symbol(key2, Decl(keyofAndIndexedAccess.ts, 362, 106)) +>key2 : Symbol(key2, Decl(keyofAndIndexedAccess.ts, 362, 78)) >K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 362, 36)) ->key3 : Symbol(key3, Decl(keyofAndIndexedAccess.ts, 362, 116)) ->K3 : Symbol(K3, Decl(keyofAndIndexedAccess.ts, 362, 60)) >T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 362, 14)) >K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 362, 16)) >K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 362, 36)) ->K3 : Symbol(K3, Decl(keyofAndIndexedAccess.ts, 362, 60)) -function path(obj: any, ...keys: (string | number)[]): any; ->path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 356, 1), Decl(keyofAndIndexedAccess.ts, 360, 62), Decl(keyofAndIndexedAccess.ts, 361, 100), Decl(keyofAndIndexedAccess.ts, 362, 142), Decl(keyofAndIndexedAccess.ts, 363, 59)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 363, 14)) ->keys : Symbol(keys, Decl(keyofAndIndexedAccess.ts, 363, 23)) +function path(obj: T, key1: K1, key2: K2, key3: K3): T[K1][K2][K3]; +>path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 357, 1), Decl(keyofAndIndexedAccess.ts, 361, 62), Decl(keyofAndIndexedAccess.ts, 362, 100), Decl(keyofAndIndexedAccess.ts, 363, 142), Decl(keyofAndIndexedAccess.ts, 364, 59)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 363, 14)) +>K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 363, 16)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 363, 14)) +>K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 363, 36)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 363, 14)) +>K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 363, 16)) +>K3 : Symbol(K3, Decl(keyofAndIndexedAccess.ts, 363, 60)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 363, 14)) +>K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 363, 16)) +>K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 363, 36)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 363, 89)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 363, 14)) +>key1 : Symbol(key1, Decl(keyofAndIndexedAccess.ts, 363, 96)) +>K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 363, 16)) +>key2 : Symbol(key2, Decl(keyofAndIndexedAccess.ts, 363, 106)) +>K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 363, 36)) +>key3 : Symbol(key3, Decl(keyofAndIndexedAccess.ts, 363, 116)) +>K3 : Symbol(K3, Decl(keyofAndIndexedAccess.ts, 363, 60)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 363, 14)) +>K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 363, 16)) +>K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 363, 36)) +>K3 : Symbol(K3, Decl(keyofAndIndexedAccess.ts, 363, 60)) -function path(obj: any, ...keys: (string | number)[]): any { ->path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 356, 1), Decl(keyofAndIndexedAccess.ts, 360, 62), Decl(keyofAndIndexedAccess.ts, 361, 100), Decl(keyofAndIndexedAccess.ts, 362, 142), Decl(keyofAndIndexedAccess.ts, 363, 59)) +function path(obj: any, ...keys: (string | number)[]): any; +>path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 357, 1), Decl(keyofAndIndexedAccess.ts, 361, 62), Decl(keyofAndIndexedAccess.ts, 362, 100), Decl(keyofAndIndexedAccess.ts, 363, 142), Decl(keyofAndIndexedAccess.ts, 364, 59)) >obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 364, 14)) >keys : Symbol(keys, Decl(keyofAndIndexedAccess.ts, 364, 23)) +function path(obj: any, ...keys: (string | number)[]): any { +>path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 357, 1), Decl(keyofAndIndexedAccess.ts, 361, 62), Decl(keyofAndIndexedAccess.ts, 362, 100), Decl(keyofAndIndexedAccess.ts, 363, 142), Decl(keyofAndIndexedAccess.ts, 364, 59)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 365, 14)) +>keys : Symbol(keys, Decl(keyofAndIndexedAccess.ts, 365, 23)) + let result = obj; ->result : Symbol(result, Decl(keyofAndIndexedAccess.ts, 365, 7)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 364, 14)) +>result : Symbol(result, Decl(keyofAndIndexedAccess.ts, 366, 7)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 365, 14)) for (let k of keys) { ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 366, 12)) ->keys : Symbol(keys, Decl(keyofAndIndexedAccess.ts, 364, 23)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 367, 12)) +>keys : Symbol(keys, Decl(keyofAndIndexedAccess.ts, 365, 23)) result = result[k]; ->result : Symbol(result, Decl(keyofAndIndexedAccess.ts, 365, 7)) ->result : Symbol(result, Decl(keyofAndIndexedAccess.ts, 365, 7)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 366, 12)) +>result : Symbol(result, Decl(keyofAndIndexedAccess.ts, 366, 7)) +>result : Symbol(result, Decl(keyofAndIndexedAccess.ts, 366, 7)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 367, 12)) } return result; ->result : Symbol(result, Decl(keyofAndIndexedAccess.ts, 365, 7)) +>result : Symbol(result, Decl(keyofAndIndexedAccess.ts, 366, 7)) } type Thing = { ->Thing : Symbol(Thing, Decl(keyofAndIndexedAccess.ts, 370, 1)) +>Thing : Symbol(Thing, Decl(keyofAndIndexedAccess.ts, 371, 1)) a: { x: number, y: string }, ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 372, 14)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 373, 8)) ->y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 373, 19)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 373, 14)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 374, 8)) +>y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 374, 19)) b: boolean ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 373, 32)) +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 374, 32)) }; function f1(thing: Thing) { ->f1 : Symbol(f1, Decl(keyofAndIndexedAccess.ts, 375, 2)) ->thing : Symbol(thing, Decl(keyofAndIndexedAccess.ts, 378, 12)) ->Thing : Symbol(Thing, Decl(keyofAndIndexedAccess.ts, 370, 1)) +>f1 : Symbol(f1, Decl(keyofAndIndexedAccess.ts, 376, 2)) +>thing : Symbol(thing, Decl(keyofAndIndexedAccess.ts, 379, 12)) +>Thing : Symbol(Thing, Decl(keyofAndIndexedAccess.ts, 371, 1)) let x1 = path(thing, 'a'); // { x: number, y: string } ->x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 379, 7)) ->path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 356, 1), Decl(keyofAndIndexedAccess.ts, 360, 62), Decl(keyofAndIndexedAccess.ts, 361, 100), Decl(keyofAndIndexedAccess.ts, 362, 142), Decl(keyofAndIndexedAccess.ts, 363, 59)) ->thing : Symbol(thing, Decl(keyofAndIndexedAccess.ts, 378, 12)) +>x1 : Symbol(x1, Decl(keyofAndIndexedAccess.ts, 380, 7)) +>path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 357, 1), Decl(keyofAndIndexedAccess.ts, 361, 62), Decl(keyofAndIndexedAccess.ts, 362, 100), Decl(keyofAndIndexedAccess.ts, 363, 142), Decl(keyofAndIndexedAccess.ts, 364, 59)) +>thing : Symbol(thing, Decl(keyofAndIndexedAccess.ts, 379, 12)) let x2 = path(thing, 'a', 'y'); // string ->x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 380, 7)) ->path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 356, 1), Decl(keyofAndIndexedAccess.ts, 360, 62), Decl(keyofAndIndexedAccess.ts, 361, 100), Decl(keyofAndIndexedAccess.ts, 362, 142), Decl(keyofAndIndexedAccess.ts, 363, 59)) ->thing : Symbol(thing, Decl(keyofAndIndexedAccess.ts, 378, 12)) +>x2 : Symbol(x2, Decl(keyofAndIndexedAccess.ts, 381, 7)) +>path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 357, 1), Decl(keyofAndIndexedAccess.ts, 361, 62), Decl(keyofAndIndexedAccess.ts, 362, 100), Decl(keyofAndIndexedAccess.ts, 363, 142), Decl(keyofAndIndexedAccess.ts, 364, 59)) +>thing : Symbol(thing, Decl(keyofAndIndexedAccess.ts, 379, 12)) let x3 = path(thing, 'b'); // boolean ->x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 381, 7)) ->path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 356, 1), Decl(keyofAndIndexedAccess.ts, 360, 62), Decl(keyofAndIndexedAccess.ts, 361, 100), Decl(keyofAndIndexedAccess.ts, 362, 142), Decl(keyofAndIndexedAccess.ts, 363, 59)) ->thing : Symbol(thing, Decl(keyofAndIndexedAccess.ts, 378, 12)) +>x3 : Symbol(x3, Decl(keyofAndIndexedAccess.ts, 382, 7)) +>path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 357, 1), Decl(keyofAndIndexedAccess.ts, 361, 62), Decl(keyofAndIndexedAccess.ts, 362, 100), Decl(keyofAndIndexedAccess.ts, 363, 142), Decl(keyofAndIndexedAccess.ts, 364, 59)) +>thing : Symbol(thing, Decl(keyofAndIndexedAccess.ts, 379, 12)) let x4 = path(thing, ...['a', 'x']); // any ->x4 : Symbol(x4, Decl(keyofAndIndexedAccess.ts, 382, 7)) ->path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 356, 1), Decl(keyofAndIndexedAccess.ts, 360, 62), Decl(keyofAndIndexedAccess.ts, 361, 100), Decl(keyofAndIndexedAccess.ts, 362, 142), Decl(keyofAndIndexedAccess.ts, 363, 59)) ->thing : Symbol(thing, Decl(keyofAndIndexedAccess.ts, 378, 12)) +>x4 : Symbol(x4, Decl(keyofAndIndexedAccess.ts, 383, 7)) +>path : Symbol(path, Decl(keyofAndIndexedAccess.ts, 357, 1), Decl(keyofAndIndexedAccess.ts, 361, 62), Decl(keyofAndIndexedAccess.ts, 362, 100), Decl(keyofAndIndexedAccess.ts, 363, 142), Decl(keyofAndIndexedAccess.ts, 364, 59)) +>thing : Symbol(thing, Decl(keyofAndIndexedAccess.ts, 379, 12)) } // Repro from comment in #12114 const assignTo2 = (object: T, key1: K1, key2: K2) => ->assignTo2 : Symbol(assignTo2, Decl(keyofAndIndexedAccess.ts, 387, 5)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 387, 19)) ->K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 387, 21)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 387, 19)) ->K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 387, 41)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 387, 19)) ->K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 387, 21)) ->object : Symbol(object, Decl(keyofAndIndexedAccess.ts, 387, 66)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 387, 19)) ->key1 : Symbol(key1, Decl(keyofAndIndexedAccess.ts, 387, 76)) ->K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 387, 21)) ->key2 : Symbol(key2, Decl(keyofAndIndexedAccess.ts, 387, 86)) ->K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 387, 41)) +>assignTo2 : Symbol(assignTo2, Decl(keyofAndIndexedAccess.ts, 388, 5)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 388, 19)) +>K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 388, 21)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 388, 19)) +>K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 388, 41)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 388, 19)) +>K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 388, 21)) +>object : Symbol(object, Decl(keyofAndIndexedAccess.ts, 388, 66)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 388, 19)) +>key1 : Symbol(key1, Decl(keyofAndIndexedAccess.ts, 388, 76)) +>K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 388, 21)) +>key2 : Symbol(key2, Decl(keyofAndIndexedAccess.ts, 388, 86)) +>K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 388, 41)) (value: T[K1][K2]) => object[key1][key2] = value; ->value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 388, 5)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 387, 19)) ->K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 387, 21)) ->K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 387, 41)) ->object : Symbol(object, Decl(keyofAndIndexedAccess.ts, 387, 66)) ->key1 : Symbol(key1, Decl(keyofAndIndexedAccess.ts, 387, 76)) ->key2 : Symbol(key2, Decl(keyofAndIndexedAccess.ts, 387, 86)) ->value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 388, 5)) +>value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 389, 5)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 388, 19)) +>K1 : Symbol(K1, Decl(keyofAndIndexedAccess.ts, 388, 21)) +>K2 : Symbol(K2, Decl(keyofAndIndexedAccess.ts, 388, 41)) +>object : Symbol(object, Decl(keyofAndIndexedAccess.ts, 388, 66)) +>key1 : Symbol(key1, Decl(keyofAndIndexedAccess.ts, 388, 76)) +>key2 : Symbol(key2, Decl(keyofAndIndexedAccess.ts, 388, 86)) +>value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 389, 5)) // Modified repro from #12573 declare function one(handler: (t: T) => void): T ->one : Symbol(one, Decl(keyofAndIndexedAccess.ts, 388, 53)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 392, 21)) ->handler : Symbol(handler, Decl(keyofAndIndexedAccess.ts, 392, 24)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 392, 34)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 392, 21)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 392, 21)) +>one : Symbol(one, Decl(keyofAndIndexedAccess.ts, 389, 53)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 393, 21)) +>handler : Symbol(handler, Decl(keyofAndIndexedAccess.ts, 393, 24)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 393, 34)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 393, 21)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 393, 21)) var empty = one(() => {}) // inferred as {}, expected ->empty : Symbol(empty, Decl(keyofAndIndexedAccess.ts, 393, 3)) ->one : Symbol(one, Decl(keyofAndIndexedAccess.ts, 388, 53)) +>empty : Symbol(empty, Decl(keyofAndIndexedAccess.ts, 394, 3)) +>one : Symbol(one, Decl(keyofAndIndexedAccess.ts, 389, 53)) type Handlers = { [K in keyof T]: (t: T[K]) => void } ->Handlers : Symbol(Handlers, Decl(keyofAndIndexedAccess.ts, 393, 25)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 395, 14)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 395, 22)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 395, 14)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 395, 38)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 395, 14)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 395, 22)) +>Handlers : Symbol(Handlers, Decl(keyofAndIndexedAccess.ts, 394, 25)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 396, 14)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 396, 22)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 396, 14)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 396, 38)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 396, 14)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 396, 22)) declare function on(handlerHash: Handlers): T ->on : Symbol(on, Decl(keyofAndIndexedAccess.ts, 395, 56)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 396, 20)) ->handlerHash : Symbol(handlerHash, Decl(keyofAndIndexedAccess.ts, 396, 23)) ->Handlers : Symbol(Handlers, Decl(keyofAndIndexedAccess.ts, 393, 25)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 396, 20)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 396, 20)) +>on : Symbol(on, Decl(keyofAndIndexedAccess.ts, 396, 56)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 397, 20)) +>handlerHash : Symbol(handlerHash, Decl(keyofAndIndexedAccess.ts, 397, 23)) +>Handlers : Symbol(Handlers, Decl(keyofAndIndexedAccess.ts, 394, 25)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 397, 20)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 397, 20)) var hashOfEmpty1 = on({ test: () => {} }); // {} ->hashOfEmpty1 : Symbol(hashOfEmpty1, Decl(keyofAndIndexedAccess.ts, 397, 3)) ->on : Symbol(on, Decl(keyofAndIndexedAccess.ts, 395, 56)) ->test : Symbol(test, Decl(keyofAndIndexedAccess.ts, 397, 23)) +>hashOfEmpty1 : Symbol(hashOfEmpty1, Decl(keyofAndIndexedAccess.ts, 398, 3)) +>on : Symbol(on, Decl(keyofAndIndexedAccess.ts, 396, 56)) +>test : Symbol(test, Decl(keyofAndIndexedAccess.ts, 398, 23)) var hashOfEmpty2 = on({ test: (x: boolean) => {} }); // { test: boolean } ->hashOfEmpty2 : Symbol(hashOfEmpty2, Decl(keyofAndIndexedAccess.ts, 398, 3)) ->on : Symbol(on, Decl(keyofAndIndexedAccess.ts, 395, 56)) ->test : Symbol(test, Decl(keyofAndIndexedAccess.ts, 398, 23)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 398, 31)) +>hashOfEmpty2 : Symbol(hashOfEmpty2, Decl(keyofAndIndexedAccess.ts, 399, 3)) +>on : Symbol(on, Decl(keyofAndIndexedAccess.ts, 396, 56)) +>test : Symbol(test, Decl(keyofAndIndexedAccess.ts, 399, 23)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 399, 31)) // Repro from #12624 interface Options1 { ->Options1 : Symbol(Options1, Decl(keyofAndIndexedAccess.ts, 398, 52)) ->Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 402, 19)) ->Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 402, 24)) +>Options1 : Symbol(Options1, Decl(keyofAndIndexedAccess.ts, 399, 52)) +>Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 403, 19)) +>Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 403, 24)) data?: Data ->data : Symbol(Options1.data, Decl(keyofAndIndexedAccess.ts, 402, 36)) ->Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 402, 19)) +>data : Symbol(Options1.data, Decl(keyofAndIndexedAccess.ts, 403, 36)) +>Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 403, 19)) computed?: Computed; ->computed : Symbol(Options1.computed, Decl(keyofAndIndexedAccess.ts, 403, 15)) ->Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 402, 24)) +>computed : Symbol(Options1.computed, Decl(keyofAndIndexedAccess.ts, 404, 15)) +>Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 403, 24)) } declare class Component1 { ->Component1 : Symbol(Component1, Decl(keyofAndIndexedAccess.ts, 405, 1)) ->Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 407, 25)) ->Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 407, 30)) +>Component1 : Symbol(Component1, Decl(keyofAndIndexedAccess.ts, 406, 1)) +>Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 408, 25)) +>Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 408, 30)) constructor(options: Options1); ->options : Symbol(options, Decl(keyofAndIndexedAccess.ts, 408, 16)) ->Options1 : Symbol(Options1, Decl(keyofAndIndexedAccess.ts, 398, 52)) ->Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 407, 25)) ->Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 407, 30)) +>options : Symbol(options, Decl(keyofAndIndexedAccess.ts, 409, 16)) +>Options1 : Symbol(Options1, Decl(keyofAndIndexedAccess.ts, 399, 52)) +>Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 408, 25)) +>Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 408, 30)) get(key: K): (Data & Computed)[K]; ->get : Symbol(Component1.get, Decl(keyofAndIndexedAccess.ts, 408, 51)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 409, 8)) ->Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 407, 25)) ->Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 407, 30)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 409, 43)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 409, 8)) ->Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 407, 25)) ->Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 407, 30)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 409, 8)) +>get : Symbol(Component1.get, Decl(keyofAndIndexedAccess.ts, 409, 51)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 410, 8)) +>Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 408, 25)) +>Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 408, 30)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 410, 43)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 410, 8)) +>Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 408, 25)) +>Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 408, 30)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 410, 8)) } let c1 = new Component1({ ->c1 : Symbol(c1, Decl(keyofAndIndexedAccess.ts, 412, 3)) ->Component1 : Symbol(Component1, Decl(keyofAndIndexedAccess.ts, 405, 1)) +>c1 : Symbol(c1, Decl(keyofAndIndexedAccess.ts, 413, 3)) +>Component1 : Symbol(Component1, Decl(keyofAndIndexedAccess.ts, 406, 1)) data: { ->data : Symbol(data, Decl(keyofAndIndexedAccess.ts, 412, 25)) +>data : Symbol(data, Decl(keyofAndIndexedAccess.ts, 413, 25)) hello: "" ->hello : Symbol(hello, Decl(keyofAndIndexedAccess.ts, 413, 11)) +>hello : Symbol(hello, Decl(keyofAndIndexedAccess.ts, 414, 11)) } }); c1.get("hello"); ->c1.get : Symbol(Component1.get, Decl(keyofAndIndexedAccess.ts, 408, 51)) ->c1 : Symbol(c1, Decl(keyofAndIndexedAccess.ts, 412, 3)) ->get : Symbol(Component1.get, Decl(keyofAndIndexedAccess.ts, 408, 51)) +>c1.get : Symbol(Component1.get, Decl(keyofAndIndexedAccess.ts, 409, 51)) +>c1 : Symbol(c1, Decl(keyofAndIndexedAccess.ts, 413, 3)) +>get : Symbol(Component1.get, Decl(keyofAndIndexedAccess.ts, 409, 51)) // Repro from #12625 interface Options2 { ->Options2 : Symbol(Options2, Decl(keyofAndIndexedAccess.ts, 418, 16)) ->Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 422, 19)) ->Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 422, 24)) +>Options2 : Symbol(Options2, Decl(keyofAndIndexedAccess.ts, 419, 16)) +>Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 423, 19)) +>Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 423, 24)) data?: Data ->data : Symbol(Options2.data, Decl(keyofAndIndexedAccess.ts, 422, 36)) ->Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 422, 19)) +>data : Symbol(Options2.data, Decl(keyofAndIndexedAccess.ts, 423, 36)) +>Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 423, 19)) computed?: Computed; ->computed : Symbol(Options2.computed, Decl(keyofAndIndexedAccess.ts, 423, 15)) ->Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 422, 24)) +>computed : Symbol(Options2.computed, Decl(keyofAndIndexedAccess.ts, 424, 15)) +>Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 423, 24)) } declare class Component2 { ->Component2 : Symbol(Component2, Decl(keyofAndIndexedAccess.ts, 425, 1)) ->Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 427, 25)) ->Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 427, 30)) +>Component2 : Symbol(Component2, Decl(keyofAndIndexedAccess.ts, 426, 1)) +>Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 428, 25)) +>Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 428, 30)) constructor(options: Options2); ->options : Symbol(options, Decl(keyofAndIndexedAccess.ts, 428, 16)) ->Options2 : Symbol(Options2, Decl(keyofAndIndexedAccess.ts, 418, 16)) ->Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 427, 25)) ->Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 427, 30)) +>options : Symbol(options, Decl(keyofAndIndexedAccess.ts, 429, 16)) +>Options2 : Symbol(Options2, Decl(keyofAndIndexedAccess.ts, 419, 16)) +>Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 428, 25)) +>Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 428, 30)) get(key: K): (Data & Computed)[K]; ->get : Symbol(Component2.get, Decl(keyofAndIndexedAccess.ts, 428, 51)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 429, 8)) ->Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 427, 25)) ->Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 427, 30)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 429, 47)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 429, 8)) ->Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 427, 25)) ->Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 427, 30)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 429, 8)) +>get : Symbol(Component2.get, Decl(keyofAndIndexedAccess.ts, 429, 51)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 430, 8)) +>Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 428, 25)) +>Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 428, 30)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 430, 47)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 430, 8)) +>Data : Symbol(Data, Decl(keyofAndIndexedAccess.ts, 428, 25)) +>Computed : Symbol(Computed, Decl(keyofAndIndexedAccess.ts, 428, 30)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 430, 8)) } // Repro from #12641 interface R { ->R : Symbol(R, Decl(keyofAndIndexedAccess.ts, 430, 1)) +>R : Symbol(R, Decl(keyofAndIndexedAccess.ts, 431, 1)) p: number; ->p : Symbol(R.p, Decl(keyofAndIndexedAccess.ts, 434, 13)) +>p : Symbol(R.p, Decl(keyofAndIndexedAccess.ts, 435, 13)) } function f(p: K) { ->f : Symbol(f, Decl(keyofAndIndexedAccess.ts, 436, 1)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 438, 11)) ->R : Symbol(R, Decl(keyofAndIndexedAccess.ts, 430, 1)) ->p : Symbol(p, Decl(keyofAndIndexedAccess.ts, 438, 30)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 438, 11)) +>f : Symbol(f, Decl(keyofAndIndexedAccess.ts, 437, 1)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 439, 11)) +>R : Symbol(R, Decl(keyofAndIndexedAccess.ts, 431, 1)) +>p : Symbol(p, Decl(keyofAndIndexedAccess.ts, 439, 30)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 439, 11)) let a: any; ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 439, 7)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 440, 7)) a[p].add; // any ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 439, 7)) ->p : Symbol(p, Decl(keyofAndIndexedAccess.ts, 438, 30)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 440, 7)) +>p : Symbol(p, Decl(keyofAndIndexedAccess.ts, 439, 30)) } // Repro from #12651 type MethodDescriptor = { ->MethodDescriptor : Symbol(MethodDescriptor, Decl(keyofAndIndexedAccess.ts, 441, 1)) +>MethodDescriptor : Symbol(MethodDescriptor, Decl(keyofAndIndexedAccess.ts, 442, 1)) name: string; ->name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 445, 25)) +>name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 446, 25)) args: any[]; ->args : Symbol(args, Decl(keyofAndIndexedAccess.ts, 446, 14)) +>args : Symbol(args, Decl(keyofAndIndexedAccess.ts, 447, 14)) returnValue: any; ->returnValue : Symbol(returnValue, Decl(keyofAndIndexedAccess.ts, 447, 13)) +>returnValue : Symbol(returnValue, Decl(keyofAndIndexedAccess.ts, 448, 13)) } declare function dispatchMethod(name: M['name'], args: M['args']): M['returnValue']; ->dispatchMethod : Symbol(dispatchMethod, Decl(keyofAndIndexedAccess.ts, 449, 1)) ->M : Symbol(M, Decl(keyofAndIndexedAccess.ts, 451, 32)) ->MethodDescriptor : Symbol(MethodDescriptor, Decl(keyofAndIndexedAccess.ts, 441, 1)) ->name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 451, 60)) ->M : Symbol(M, Decl(keyofAndIndexedAccess.ts, 451, 32)) ->args : Symbol(args, Decl(keyofAndIndexedAccess.ts, 451, 76)) ->M : Symbol(M, Decl(keyofAndIndexedAccess.ts, 451, 32)) ->M : Symbol(M, Decl(keyofAndIndexedAccess.ts, 451, 32)) +>dispatchMethod : Symbol(dispatchMethod, Decl(keyofAndIndexedAccess.ts, 450, 1)) +>M : Symbol(M, Decl(keyofAndIndexedAccess.ts, 452, 32)) +>MethodDescriptor : Symbol(MethodDescriptor, Decl(keyofAndIndexedAccess.ts, 442, 1)) +>name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 452, 60)) +>M : Symbol(M, Decl(keyofAndIndexedAccess.ts, 452, 32)) +>args : Symbol(args, Decl(keyofAndIndexedAccess.ts, 452, 76)) +>M : Symbol(M, Decl(keyofAndIndexedAccess.ts, 452, 32)) +>M : Symbol(M, Decl(keyofAndIndexedAccess.ts, 452, 32)) type SomeMethodDescriptor = { ->SomeMethodDescriptor : Symbol(SomeMethodDescriptor, Decl(keyofAndIndexedAccess.ts, 451, 112)) +>SomeMethodDescriptor : Symbol(SomeMethodDescriptor, Decl(keyofAndIndexedAccess.ts, 452, 112)) name: "someMethod"; ->name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 453, 29)) +>name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 454, 29)) args: [string, number]; ->args : Symbol(args, Decl(keyofAndIndexedAccess.ts, 454, 20)) +>args : Symbol(args, Decl(keyofAndIndexedAccess.ts, 455, 20)) returnValue: string[]; ->returnValue : Symbol(returnValue, Decl(keyofAndIndexedAccess.ts, 455, 24)) +>returnValue : Symbol(returnValue, Decl(keyofAndIndexedAccess.ts, 456, 24)) } let result = dispatchMethod("someMethod", ["hello", 35]); ->result : Symbol(result, Decl(keyofAndIndexedAccess.ts, 459, 3)) ->dispatchMethod : Symbol(dispatchMethod, Decl(keyofAndIndexedAccess.ts, 449, 1)) ->SomeMethodDescriptor : Symbol(SomeMethodDescriptor, Decl(keyofAndIndexedAccess.ts, 451, 112)) +>result : Symbol(result, Decl(keyofAndIndexedAccess.ts, 460, 3)) +>dispatchMethod : Symbol(dispatchMethod, Decl(keyofAndIndexedAccess.ts, 450, 1)) +>SomeMethodDescriptor : Symbol(SomeMethodDescriptor, Decl(keyofAndIndexedAccess.ts, 452, 112)) // Repro from #13073 type KeyTypes = "a" | "b" ->KeyTypes : Symbol(KeyTypes, Decl(keyofAndIndexedAccess.ts, 459, 79)) +>KeyTypes : Symbol(KeyTypes, Decl(keyofAndIndexedAccess.ts, 460, 79)) let MyThingy: { [key in KeyTypes]: string[] }; ->MyThingy : Symbol(MyThingy, Decl(keyofAndIndexedAccess.ts, 464, 3)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 464, 17)) ->KeyTypes : Symbol(KeyTypes, Decl(keyofAndIndexedAccess.ts, 459, 79)) +>MyThingy : Symbol(MyThingy, Decl(keyofAndIndexedAccess.ts, 465, 3)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 465, 17)) +>KeyTypes : Symbol(KeyTypes, Decl(keyofAndIndexedAccess.ts, 460, 79)) function addToMyThingy(key: S) { ->addToMyThingy : Symbol(addToMyThingy, Decl(keyofAndIndexedAccess.ts, 464, 46)) ->S : Symbol(S, Decl(keyofAndIndexedAccess.ts, 466, 23)) ->KeyTypes : Symbol(KeyTypes, Decl(keyofAndIndexedAccess.ts, 459, 79)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 466, 43)) ->S : Symbol(S, Decl(keyofAndIndexedAccess.ts, 466, 23)) +>addToMyThingy : Symbol(addToMyThingy, Decl(keyofAndIndexedAccess.ts, 465, 46)) +>S : Symbol(S, Decl(keyofAndIndexedAccess.ts, 467, 23)) +>KeyTypes : Symbol(KeyTypes, Decl(keyofAndIndexedAccess.ts, 460, 79)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 467, 43)) +>S : Symbol(S, Decl(keyofAndIndexedAccess.ts, 467, 23)) MyThingy[key].push("a"); >MyThingy[key].push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --)) ->MyThingy : Symbol(MyThingy, Decl(keyofAndIndexedAccess.ts, 464, 3)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 466, 43)) +>MyThingy : Symbol(MyThingy, Decl(keyofAndIndexedAccess.ts, 465, 3)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 467, 43)) >push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --)) } // Repro from #13102 type Handler = { ->Handler : Symbol(Handler, Decl(keyofAndIndexedAccess.ts, 468, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 472, 13)) +>Handler : Symbol(Handler, Decl(keyofAndIndexedAccess.ts, 469, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 473, 13)) onChange: (name: keyof T) => void; ->onChange : Symbol(onChange, Decl(keyofAndIndexedAccess.ts, 472, 19)) ->name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 473, 15)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 472, 13)) +>onChange : Symbol(onChange, Decl(keyofAndIndexedAccess.ts, 473, 19)) +>name : Symbol(name, Decl(keyofAndIndexedAccess.ts, 474, 15)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 473, 13)) }; function onChangeGenericFunction(handler: Handler) { ->onChangeGenericFunction : Symbol(onChangeGenericFunction, Decl(keyofAndIndexedAccess.ts, 474, 2)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 476, 33)) ->handler : Symbol(handler, Decl(keyofAndIndexedAccess.ts, 476, 36)) ->Handler : Symbol(Handler, Decl(keyofAndIndexedAccess.ts, 468, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 476, 33)) ->preset : Symbol(preset, Decl(keyofAndIndexedAccess.ts, 476, 58)) +>onChangeGenericFunction : Symbol(onChangeGenericFunction, Decl(keyofAndIndexedAccess.ts, 475, 2)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 477, 33)) +>handler : Symbol(handler, Decl(keyofAndIndexedAccess.ts, 477, 36)) +>Handler : Symbol(Handler, Decl(keyofAndIndexedAccess.ts, 469, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 477, 33)) +>preset : Symbol(preset, Decl(keyofAndIndexedAccess.ts, 477, 58)) handler.onChange('preset') ->handler.onChange : Symbol(onChange, Decl(keyofAndIndexedAccess.ts, 472, 19)) ->handler : Symbol(handler, Decl(keyofAndIndexedAccess.ts, 476, 36)) ->onChange : Symbol(onChange, Decl(keyofAndIndexedAccess.ts, 472, 19)) +>handler.onChange : Symbol(onChange, Decl(keyofAndIndexedAccess.ts, 473, 19)) +>handler : Symbol(handler, Decl(keyofAndIndexedAccess.ts, 477, 36)) +>onChange : Symbol(onChange, Decl(keyofAndIndexedAccess.ts, 473, 19)) } // Repro from #13285 function updateIds, K extends string>( ->updateIds : Symbol(updateIds, Decl(keyofAndIndexedAccess.ts, 478, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 482, 19)) +>updateIds : Symbol(updateIds, Decl(keyofAndIndexedAccess.ts, 479, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 483, 19)) >Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 482, 47)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 482, 47)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 483, 47)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 483, 47)) obj: T, ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 482, 66)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 482, 19)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 483, 66)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 483, 19)) idFields: K[], ->idFields : Symbol(idFields, Decl(keyofAndIndexedAccess.ts, 483, 11)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 482, 47)) +>idFields : Symbol(idFields, Decl(keyofAndIndexedAccess.ts, 484, 11)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 483, 47)) idMapping: Partial> ->idMapping : Symbol(idMapping, Decl(keyofAndIndexedAccess.ts, 484, 18)) +>idMapping : Symbol(idMapping, Decl(keyofAndIndexedAccess.ts, 485, 18)) >Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) >Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 482, 19)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 482, 47)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 482, 19)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 482, 47)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 483, 19)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 483, 47)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 483, 19)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 483, 47)) ): Record { >Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 482, 47)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 483, 47)) for (const idField of idFields) { ->idField : Symbol(idField, Decl(keyofAndIndexedAccess.ts, 487, 14)) ->idFields : Symbol(idFields, Decl(keyofAndIndexedAccess.ts, 483, 11)) +>idField : Symbol(idField, Decl(keyofAndIndexedAccess.ts, 488, 14)) +>idFields : Symbol(idFields, Decl(keyofAndIndexedAccess.ts, 484, 11)) const newId: T[K] | undefined = idMapping[obj[idField]]; ->newId : Symbol(newId, Decl(keyofAndIndexedAccess.ts, 488, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 482, 19)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 482, 47)) ->idMapping : Symbol(idMapping, Decl(keyofAndIndexedAccess.ts, 484, 18)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 482, 66)) ->idField : Symbol(idField, Decl(keyofAndIndexedAccess.ts, 487, 14)) +>newId : Symbol(newId, Decl(keyofAndIndexedAccess.ts, 489, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 483, 19)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 483, 47)) +>idMapping : Symbol(idMapping, Decl(keyofAndIndexedAccess.ts, 485, 18)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 483, 66)) +>idField : Symbol(idField, Decl(keyofAndIndexedAccess.ts, 488, 14)) if (newId) { ->newId : Symbol(newId, Decl(keyofAndIndexedAccess.ts, 488, 13)) +>newId : Symbol(newId, Decl(keyofAndIndexedAccess.ts, 489, 13)) obj[idField] = newId; ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 482, 66)) ->idField : Symbol(idField, Decl(keyofAndIndexedAccess.ts, 487, 14)) ->newId : Symbol(newId, Decl(keyofAndIndexedAccess.ts, 488, 13)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 483, 66)) +>idField : Symbol(idField, Decl(keyofAndIndexedAccess.ts, 488, 14)) +>newId : Symbol(newId, Decl(keyofAndIndexedAccess.ts, 489, 13)) } } return obj; ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 482, 66)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 483, 66)) } // Repro from #13285 function updateIds2( ->updateIds2 : Symbol(updateIds2, Decl(keyofAndIndexedAccess.ts, 494, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 498, 20)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 498, 33)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 498, 54)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 498, 20)) +>updateIds2 : Symbol(updateIds2, Decl(keyofAndIndexedAccess.ts, 495, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 499, 20)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 499, 33)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 499, 54)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 499, 20)) obj: T, ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 498, 74)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 498, 20)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 499, 74)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 499, 20)) key: K, ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 499, 11)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 498, 54)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 500, 11)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 499, 54)) stringMap: { [oldId: string]: string } ->stringMap : Symbol(stringMap, Decl(keyofAndIndexedAccess.ts, 500, 11)) ->oldId : Symbol(oldId, Decl(keyofAndIndexedAccess.ts, 501, 18)) +>stringMap : Symbol(stringMap, Decl(keyofAndIndexedAccess.ts, 501, 11)) +>oldId : Symbol(oldId, Decl(keyofAndIndexedAccess.ts, 502, 18)) ) { var x = obj[key]; ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 503, 7)) ->obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 498, 74)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 499, 11)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 504, 7)) +>obj : Symbol(obj, Decl(keyofAndIndexedAccess.ts, 499, 74)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 500, 11)) stringMap[x]; // Should be OK. ->stringMap : Symbol(stringMap, Decl(keyofAndIndexedAccess.ts, 500, 11)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 503, 7)) +>stringMap : Symbol(stringMap, Decl(keyofAndIndexedAccess.ts, 501, 11)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 504, 7)) } // Repro from #13514 declare function head>(list: T): T[0]; ->head : Symbol(head, Decl(keyofAndIndexedAccess.ts, 505, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 509, 22)) +>head : Symbol(head, Decl(keyofAndIndexedAccess.ts, 506, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 510, 22)) >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) ->list : Symbol(list, Decl(keyofAndIndexedAccess.ts, 509, 44)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 509, 22)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 509, 22)) +>list : Symbol(list, Decl(keyofAndIndexedAccess.ts, 510, 44)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 510, 22)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 510, 22)) // Repro from #13604 class A { ->A : Symbol(A, Decl(keyofAndIndexedAccess.ts, 509, 59)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 513, 8)) +>A : Symbol(A, Decl(keyofAndIndexedAccess.ts, 510, 59)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 514, 8)) props: T & { foo: string }; ->props : Symbol(A.props, Decl(keyofAndIndexedAccess.ts, 513, 12)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 513, 8)) ->foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 514, 13)) +>props : Symbol(A.props, Decl(keyofAndIndexedAccess.ts, 514, 12)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 514, 8)) +>foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 515, 13)) } class B extends A<{ x: number}> { ->B : Symbol(B, Decl(keyofAndIndexedAccess.ts, 515, 1)) ->A : Symbol(A, Decl(keyofAndIndexedAccess.ts, 509, 59)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 517, 19)) +>B : Symbol(B, Decl(keyofAndIndexedAccess.ts, 516, 1)) +>A : Symbol(A, Decl(keyofAndIndexedAccess.ts, 510, 59)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 518, 19)) f(p: this["props"]) { ->f : Symbol(B.f, Decl(keyofAndIndexedAccess.ts, 517, 33)) ->p : Symbol(p, Decl(keyofAndIndexedAccess.ts, 518, 3)) +>f : Symbol(B.f, Decl(keyofAndIndexedAccess.ts, 518, 33)) +>p : Symbol(p, Decl(keyofAndIndexedAccess.ts, 519, 3)) p.x; ->p.x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 517, 19)) ->p : Symbol(p, Decl(keyofAndIndexedAccess.ts, 518, 3)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 517, 19)) +>p.x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 518, 19)) +>p : Symbol(p, Decl(keyofAndIndexedAccess.ts, 519, 3)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 518, 19)) } } // Repro from #13749 class Form { ->Form : Symbol(Form, Decl(keyofAndIndexedAccess.ts, 521, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 525, 11)) +>Form : Symbol(Form, Decl(keyofAndIndexedAccess.ts, 522, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 526, 11)) private childFormFactories: {[K in keyof T]: (v: T[K]) => Form} ->childFormFactories : Symbol(Form.childFormFactories, Decl(keyofAndIndexedAccess.ts, 525, 15)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 526, 34)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 525, 11)) ->v : Symbol(v, Decl(keyofAndIndexedAccess.ts, 526, 50)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 525, 11)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 526, 34)) ->Form : Symbol(Form, Decl(keyofAndIndexedAccess.ts, 521, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 525, 11)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 526, 34)) +>childFormFactories : Symbol(Form.childFormFactories, Decl(keyofAndIndexedAccess.ts, 526, 15)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 527, 34)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 526, 11)) +>v : Symbol(v, Decl(keyofAndIndexedAccess.ts, 527, 50)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 526, 11)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 527, 34)) +>Form : Symbol(Form, Decl(keyofAndIndexedAccess.ts, 522, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 526, 11)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 527, 34)) public set(prop: K, value: T[K]) { ->set : Symbol(Form.set, Decl(keyofAndIndexedAccess.ts, 526, 73)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 528, 15)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 525, 11)) ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 528, 34)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 528, 15)) ->value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 528, 42)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 525, 11)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 528, 15)) +>set : Symbol(Form.set, Decl(keyofAndIndexedAccess.ts, 527, 73)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 529, 15)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 526, 11)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 529, 34)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 529, 15)) +>value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 529, 42)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 526, 11)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 529, 15)) this.childFormFactories[prop](value) ->this.childFormFactories : Symbol(Form.childFormFactories, Decl(keyofAndIndexedAccess.ts, 525, 15)) ->this : Symbol(Form, Decl(keyofAndIndexedAccess.ts, 521, 1)) ->childFormFactories : Symbol(Form.childFormFactories, Decl(keyofAndIndexedAccess.ts, 525, 15)) ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 528, 34)) ->value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 528, 42)) +>this.childFormFactories : Symbol(Form.childFormFactories, Decl(keyofAndIndexedAccess.ts, 526, 15)) +>this : Symbol(Form, Decl(keyofAndIndexedAccess.ts, 522, 1)) +>childFormFactories : Symbol(Form.childFormFactories, Decl(keyofAndIndexedAccess.ts, 526, 15)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 529, 34)) +>value : Symbol(value, Decl(keyofAndIndexedAccess.ts, 529, 42)) } } // Repro from #13787 class SampleClass

{ ->SampleClass : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 531, 1)) ->P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 535, 18)) +>SampleClass : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 532, 1)) +>P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 536, 18)) public props: Readonly

; ->props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 535, 22)) +>props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 536, 22)) >Readonly : Symbol(Readonly, Decl(lib.es5.d.ts, --, --)) ->P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 535, 18)) +>P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 536, 18)) constructor(props: P) { ->props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 537, 16)) ->P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 535, 18)) +>props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 538, 16)) +>P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 536, 18)) this.props = Object.freeze(props); ->this.props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 535, 22)) ->this : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 531, 1)) ->props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 535, 22)) +>this.props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 536, 22)) +>this : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 532, 1)) +>props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 536, 22)) >Object.freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) >freeze : Symbol(ObjectConstructor.freeze, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) ->props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 537, 16)) +>props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 538, 16)) } } interface Foo { ->Foo : Symbol(Foo, Decl(keyofAndIndexedAccess.ts, 540, 1)) +>Foo : Symbol(Foo, Decl(keyofAndIndexedAccess.ts, 541, 1)) foo: string; ->foo : Symbol(Foo.foo, Decl(keyofAndIndexedAccess.ts, 542, 15)) +>foo : Symbol(Foo.foo, Decl(keyofAndIndexedAccess.ts, 543, 15)) } declare function merge(obj1: T, obj2: U): T & U; ->merge : Symbol(merge, Decl(keyofAndIndexedAccess.ts, 544, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 546, 23)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 546, 25)) ->obj1 : Symbol(obj1, Decl(keyofAndIndexedAccess.ts, 546, 29)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 546, 23)) ->obj2 : Symbol(obj2, Decl(keyofAndIndexedAccess.ts, 546, 37)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 546, 25)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 546, 23)) ->U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 546, 25)) +>merge : Symbol(merge, Decl(keyofAndIndexedAccess.ts, 545, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 547, 23)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 547, 25)) +>obj1 : Symbol(obj1, Decl(keyofAndIndexedAccess.ts, 547, 29)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 547, 23)) +>obj2 : Symbol(obj2, Decl(keyofAndIndexedAccess.ts, 547, 37)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 547, 25)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 547, 23)) +>U : Symbol(U, Decl(keyofAndIndexedAccess.ts, 547, 25)) class AnotherSampleClass extends SampleClass { ->AnotherSampleClass : Symbol(AnotherSampleClass, Decl(keyofAndIndexedAccess.ts, 546, 54)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 548, 25)) ->SampleClass : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 531, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 548, 25)) ->Foo : Symbol(Foo, Decl(keyofAndIndexedAccess.ts, 540, 1)) +>AnotherSampleClass : Symbol(AnotherSampleClass, Decl(keyofAndIndexedAccess.ts, 547, 54)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 549, 25)) +>SampleClass : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 532, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 549, 25)) +>Foo : Symbol(Foo, Decl(keyofAndIndexedAccess.ts, 541, 1)) constructor(props: T) { ->props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 549, 16)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 548, 25)) +>props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 550, 16)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 549, 25)) const foo: Foo = { foo: "bar" }; ->foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 550, 13)) ->Foo : Symbol(Foo, Decl(keyofAndIndexedAccess.ts, 540, 1)) ->foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 550, 26)) +>foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 551, 13)) +>Foo : Symbol(Foo, Decl(keyofAndIndexedAccess.ts, 541, 1)) +>foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 551, 26)) super(merge(props, foo)); ->super : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 531, 1)) ->merge : Symbol(merge, Decl(keyofAndIndexedAccess.ts, 544, 1)) ->props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 549, 16)) ->foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 550, 13)) +>super : Symbol(SampleClass, Decl(keyofAndIndexedAccess.ts, 532, 1)) +>merge : Symbol(merge, Decl(keyofAndIndexedAccess.ts, 545, 1)) +>props : Symbol(props, Decl(keyofAndIndexedAccess.ts, 550, 16)) +>foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 551, 13)) } public brokenMethod() { ->brokenMethod : Symbol(AnotherSampleClass.brokenMethod, Decl(keyofAndIndexedAccess.ts, 552, 5)) +>brokenMethod : Symbol(AnotherSampleClass.brokenMethod, Decl(keyofAndIndexedAccess.ts, 553, 5)) this.props.foo.concat; >this.props.foo.concat : Symbol(String.concat, Decl(lib.es5.d.ts, --, --)) ->this.props.foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 542, 15)) ->this.props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 535, 22)) ->this : Symbol(AnotherSampleClass, Decl(keyofAndIndexedAccess.ts, 546, 54)) ->props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 535, 22)) ->foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 542, 15)) +>this.props.foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 543, 15)) +>this.props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 536, 22)) +>this : Symbol(AnotherSampleClass, Decl(keyofAndIndexedAccess.ts, 547, 54)) +>props : Symbol(SampleClass.props, Decl(keyofAndIndexedAccess.ts, 536, 22)) +>foo : Symbol(foo, Decl(keyofAndIndexedAccess.ts, 543, 15)) >concat : Symbol(String.concat, Decl(lib.es5.d.ts, --, --)) } } new AnotherSampleClass({}); ->AnotherSampleClass : Symbol(AnotherSampleClass, Decl(keyofAndIndexedAccess.ts, 546, 54)) +>AnotherSampleClass : Symbol(AnotherSampleClass, Decl(keyofAndIndexedAccess.ts, 547, 54)) // Positive repro from #17166 function f3>(t: T, k: K, tk: T[K]): void { ->f3 : Symbol(f3, Decl(keyofAndIndexedAccess.ts, 558, 27)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 561, 12)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 561, 14)) +>f3 : Symbol(f3, Decl(keyofAndIndexedAccess.ts, 559, 27)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 562, 12)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 562, 14)) >Extract : Symbol(Extract, Decl(lib.es5.d.ts, --, --)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 561, 12)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 561, 51)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 561, 12)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 561, 56)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 561, 14)) ->tk : Symbol(tk, Decl(keyofAndIndexedAccess.ts, 561, 62)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 561, 12)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 561, 14)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 562, 12)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 562, 51)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 562, 12)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 562, 56)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 562, 14)) +>tk : Symbol(tk, Decl(keyofAndIndexedAccess.ts, 562, 62)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 562, 12)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 562, 14)) for (let key in t) { ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 562, 12)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 561, 51)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 563, 12)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 562, 51)) key = k // ok, K ==> keyof T ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 562, 12)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 561, 56)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 563, 12)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 562, 56)) t[key] = tk; // ok, T[K] ==> T[keyof T] ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 561, 51)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 562, 12)) ->tk : Symbol(tk, Decl(keyofAndIndexedAccess.ts, 561, 62)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 562, 51)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 563, 12)) +>tk : Symbol(tk, Decl(keyofAndIndexedAccess.ts, 562, 62)) } } // # 21185 type Predicates = { ->Predicates : Symbol(Predicates, Decl(keyofAndIndexedAccess.ts, 566, 1)) ->TaggedRecord : Symbol(TaggedRecord, Decl(keyofAndIndexedAccess.ts, 569, 16)) +>Predicates : Symbol(Predicates, Decl(keyofAndIndexedAccess.ts, 567, 1)) +>TaggedRecord : Symbol(TaggedRecord, Decl(keyofAndIndexedAccess.ts, 570, 16)) [T in keyof TaggedRecord]: (variant: TaggedRecord[keyof TaggedRecord]) => variant is TaggedRecord[T] ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 570, 3)) ->TaggedRecord : Symbol(TaggedRecord, Decl(keyofAndIndexedAccess.ts, 569, 16)) ->variant : Symbol(variant, Decl(keyofAndIndexedAccess.ts, 570, 30)) ->TaggedRecord : Symbol(TaggedRecord, Decl(keyofAndIndexedAccess.ts, 569, 16)) ->TaggedRecord : Symbol(TaggedRecord, Decl(keyofAndIndexedAccess.ts, 569, 16)) ->variant : Symbol(variant, Decl(keyofAndIndexedAccess.ts, 570, 30)) ->TaggedRecord : Symbol(TaggedRecord, Decl(keyofAndIndexedAccess.ts, 569, 16)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 570, 3)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 571, 3)) +>TaggedRecord : Symbol(TaggedRecord, Decl(keyofAndIndexedAccess.ts, 570, 16)) +>variant : Symbol(variant, Decl(keyofAndIndexedAccess.ts, 571, 30)) +>TaggedRecord : Symbol(TaggedRecord, Decl(keyofAndIndexedAccess.ts, 570, 16)) +>TaggedRecord : Symbol(TaggedRecord, Decl(keyofAndIndexedAccess.ts, 570, 16)) +>variant : Symbol(variant, Decl(keyofAndIndexedAccess.ts, 571, 30)) +>TaggedRecord : Symbol(TaggedRecord, Decl(keyofAndIndexedAccess.ts, 570, 16)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 571, 3)) } // Repros from #23592 type Example = { [K in keyof T]: T[K]["prop"] }; ->Example : Symbol(Example, Decl(keyofAndIndexedAccess.ts, 571, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 575, 13)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 575, 26)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 575, 13)) ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 575, 42)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 575, 63)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 575, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 575, 13)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 575, 63)) +>Example : Symbol(Example, Decl(keyofAndIndexedAccess.ts, 572, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 576, 13)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 576, 26)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 576, 13)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 576, 42)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 576, 63)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 576, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 576, 13)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 576, 63)) type Result = Example<{ a: { prop: string }; b: { prop: number } }>; ->Result : Symbol(Result, Decl(keyofAndIndexedAccess.ts, 575, 93)) ->Example : Symbol(Example, Decl(keyofAndIndexedAccess.ts, 571, 1)) ->a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 576, 23)) ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 576, 28)) ->b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 576, 44)) ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 576, 49)) +>Result : Symbol(Result, Decl(keyofAndIndexedAccess.ts, 576, 93)) +>Example : Symbol(Example, Decl(keyofAndIndexedAccess.ts, 572, 1)) +>a : Symbol(a, Decl(keyofAndIndexedAccess.ts, 577, 23)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 577, 28)) +>b : Symbol(b, Decl(keyofAndIndexedAccess.ts, 577, 44)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 577, 49)) type Helper2 = { [K in keyof T]: Extract }; ->Helper2 : Symbol(Helper2, Decl(keyofAndIndexedAccess.ts, 576, 68)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 578, 13)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 578, 21)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 578, 13)) +>Helper2 : Symbol(Helper2, Decl(keyofAndIndexedAccess.ts, 577, 68)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 579, 13)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 579, 21)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 579, 13)) >Extract : Symbol(Extract, Decl(lib.es5.d.ts, --, --)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 578, 13)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 578, 21)) ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 578, 51)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 579, 13)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 579, 21)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 579, 51)) type Example2 = { [K in keyof Helper2]: Helper2[K]["prop"] }; ->Example2 : Symbol(Example2, Decl(keyofAndIndexedAccess.ts, 578, 67)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 579, 14)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 579, 22)) ->Helper2 : Symbol(Helper2, Decl(keyofAndIndexedAccess.ts, 576, 68)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 579, 14)) ->Helper2 : Symbol(Helper2, Decl(keyofAndIndexedAccess.ts, 576, 68)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 579, 14)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 579, 22)) +>Example2 : Symbol(Example2, Decl(keyofAndIndexedAccess.ts, 579, 67)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 580, 14)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 580, 22)) +>Helper2 : Symbol(Helper2, Decl(keyofAndIndexedAccess.ts, 577, 68)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 580, 14)) +>Helper2 : Symbol(Helper2, Decl(keyofAndIndexedAccess.ts, 577, 68)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 580, 14)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 580, 22)) type Result2 = Example2<{ 1: { prop: string }; 2: { prop: number } }>; ->Result2 : Symbol(Result2, Decl(keyofAndIndexedAccess.ts, 579, 70)) ->Example2 : Symbol(Example2, Decl(keyofAndIndexedAccess.ts, 578, 67)) ->1 : Symbol(1, Decl(keyofAndIndexedAccess.ts, 580, 25)) ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 580, 30)) ->2 : Symbol(2, Decl(keyofAndIndexedAccess.ts, 580, 46)) ->prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 580, 51)) +>Result2 : Symbol(Result2, Decl(keyofAndIndexedAccess.ts, 580, 70)) +>Example2 : Symbol(Example2, Decl(keyofAndIndexedAccess.ts, 579, 67)) +>1 : Symbol(1, Decl(keyofAndIndexedAccess.ts, 581, 25)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 581, 30)) +>2 : Symbol(2, Decl(keyofAndIndexedAccess.ts, 581, 46)) +>prop : Symbol(prop, Decl(keyofAndIndexedAccess.ts, 581, 51)) // Repro from #23618 type DBBoolTable = { [k in K]: 0 | 1 } ->DBBoolTable : Symbol(DBBoolTable, Decl(keyofAndIndexedAccess.ts, 580, 70)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 584, 17)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 584, 40)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 584, 17)) +>DBBoolTable : Symbol(DBBoolTable, Decl(keyofAndIndexedAccess.ts, 581, 70)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 585, 17)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 585, 40)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 585, 17)) enum Flag { ->Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 584, 56)) +>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 585, 56)) FLAG_1 = "flag_1", ->FLAG_1 : Symbol(Flag.FLAG_1, Decl(keyofAndIndexedAccess.ts, 585, 11)) +>FLAG_1 : Symbol(Flag.FLAG_1, Decl(keyofAndIndexedAccess.ts, 586, 11)) FLAG_2 = "flag_2" ->FLAG_2 : Symbol(Flag.FLAG_2, Decl(keyofAndIndexedAccess.ts, 586, 22)) +>FLAG_2 : Symbol(Flag.FLAG_2, Decl(keyofAndIndexedAccess.ts, 587, 22)) } type SimpleDBRecord = { staticField: number } & DBBoolTable ->SimpleDBRecord : Symbol(SimpleDBRecord, Decl(keyofAndIndexedAccess.ts, 588, 1)) ->Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 590, 20)) ->staticField : Symbol(staticField, Decl(keyofAndIndexedAccess.ts, 590, 44)) ->DBBoolTable : Symbol(DBBoolTable, Decl(keyofAndIndexedAccess.ts, 580, 70)) ->Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 590, 20)) +>SimpleDBRecord : Symbol(SimpleDBRecord, Decl(keyofAndIndexedAccess.ts, 589, 1)) +>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 591, 20)) +>staticField : Symbol(staticField, Decl(keyofAndIndexedAccess.ts, 591, 44)) +>DBBoolTable : Symbol(DBBoolTable, Decl(keyofAndIndexedAccess.ts, 581, 70)) +>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 591, 20)) function getFlagsFromSimpleRecord(record: SimpleDBRecord, flags: Flag[]) { ->getFlagsFromSimpleRecord : Symbol(getFlagsFromSimpleRecord, Decl(keyofAndIndexedAccess.ts, 590, 86)) ->Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 591, 34)) ->record : Symbol(record, Decl(keyofAndIndexedAccess.ts, 591, 55)) ->SimpleDBRecord : Symbol(SimpleDBRecord, Decl(keyofAndIndexedAccess.ts, 588, 1)) ->Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 591, 34)) ->flags : Symbol(flags, Decl(keyofAndIndexedAccess.ts, 591, 84)) ->Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 591, 34)) +>getFlagsFromSimpleRecord : Symbol(getFlagsFromSimpleRecord, Decl(keyofAndIndexedAccess.ts, 591, 86)) +>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 592, 34)) +>record : Symbol(record, Decl(keyofAndIndexedAccess.ts, 592, 55)) +>SimpleDBRecord : Symbol(SimpleDBRecord, Decl(keyofAndIndexedAccess.ts, 589, 1)) +>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 592, 34)) +>flags : Symbol(flags, Decl(keyofAndIndexedAccess.ts, 592, 84)) +>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 592, 34)) return record[flags[0]]; ->record : Symbol(record, Decl(keyofAndIndexedAccess.ts, 591, 55)) ->flags : Symbol(flags, Decl(keyofAndIndexedAccess.ts, 591, 84)) +>record : Symbol(record, Decl(keyofAndIndexedAccess.ts, 592, 55)) +>flags : Symbol(flags, Decl(keyofAndIndexedAccess.ts, 592, 84)) } type DynamicDBRecord = ({ dynamicField: number } | { dynamicField: string }) & DBBoolTable ->DynamicDBRecord : Symbol(DynamicDBRecord, Decl(keyofAndIndexedAccess.ts, 593, 1)) ->Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 595, 21)) ->dynamicField : Symbol(dynamicField, Decl(keyofAndIndexedAccess.ts, 595, 46)) ->dynamicField : Symbol(dynamicField, Decl(keyofAndIndexedAccess.ts, 595, 73)) ->DBBoolTable : Symbol(DBBoolTable, Decl(keyofAndIndexedAccess.ts, 580, 70)) ->Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 595, 21)) +>DynamicDBRecord : Symbol(DynamicDBRecord, Decl(keyofAndIndexedAccess.ts, 594, 1)) +>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 596, 21)) +>dynamicField : Symbol(dynamicField, Decl(keyofAndIndexedAccess.ts, 596, 46)) +>dynamicField : Symbol(dynamicField, Decl(keyofAndIndexedAccess.ts, 596, 73)) +>DBBoolTable : Symbol(DBBoolTable, Decl(keyofAndIndexedAccess.ts, 581, 70)) +>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 596, 21)) function getFlagsFromDynamicRecord(record: DynamicDBRecord, flags: Flag[]) { ->getFlagsFromDynamicRecord : Symbol(getFlagsFromDynamicRecord, Decl(keyofAndIndexedAccess.ts, 595, 117)) ->Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 596, 35)) ->record : Symbol(record, Decl(keyofAndIndexedAccess.ts, 596, 56)) ->DynamicDBRecord : Symbol(DynamicDBRecord, Decl(keyofAndIndexedAccess.ts, 593, 1)) ->Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 596, 35)) ->flags : Symbol(flags, Decl(keyofAndIndexedAccess.ts, 596, 86)) ->Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 596, 35)) +>getFlagsFromDynamicRecord : Symbol(getFlagsFromDynamicRecord, Decl(keyofAndIndexedAccess.ts, 596, 117)) +>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 597, 35)) +>record : Symbol(record, Decl(keyofAndIndexedAccess.ts, 597, 56)) +>DynamicDBRecord : Symbol(DynamicDBRecord, Decl(keyofAndIndexedAccess.ts, 594, 1)) +>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 597, 35)) +>flags : Symbol(flags, Decl(keyofAndIndexedAccess.ts, 597, 86)) +>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 597, 35)) return record[flags[0]]; ->record : Symbol(record, Decl(keyofAndIndexedAccess.ts, 596, 56)) ->flags : Symbol(flags, Decl(keyofAndIndexedAccess.ts, 596, 86)) +>record : Symbol(record, Decl(keyofAndIndexedAccess.ts, 597, 56)) +>flags : Symbol(flags, Decl(keyofAndIndexedAccess.ts, 597, 86)) } // Repro from #21368 interface I { ->I : Symbol(I, Decl(keyofAndIndexedAccess.ts, 598, 1)) +>I : Symbol(I, Decl(keyofAndIndexedAccess.ts, 599, 1)) foo: string; ->foo : Symbol(I.foo, Decl(keyofAndIndexedAccess.ts, 602, 13)) +>foo : Symbol(I.foo, Decl(keyofAndIndexedAccess.ts, 603, 13)) } declare function take(p: T): void; ->take : Symbol(take, Decl(keyofAndIndexedAccess.ts, 604, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 606, 22)) ->p : Symbol(p, Decl(keyofAndIndexedAccess.ts, 606, 25)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 606, 22)) +>take : Symbol(take, Decl(keyofAndIndexedAccess.ts, 605, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 607, 22)) +>p : Symbol(p, Decl(keyofAndIndexedAccess.ts, 607, 25)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 607, 22)) function fn(o: T, k: K) { ->fn : Symbol(fn, Decl(keyofAndIndexedAccess.ts, 606, 37)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 608, 12)) ->I : Symbol(I, Decl(keyofAndIndexedAccess.ts, 598, 1)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 608, 24)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 608, 12)) ->o : Symbol(o, Decl(keyofAndIndexedAccess.ts, 608, 44)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 608, 12)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 608, 49)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 608, 24)) +>fn : Symbol(fn, Decl(keyofAndIndexedAccess.ts, 607, 37)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 609, 12)) +>I : Symbol(I, Decl(keyofAndIndexedAccess.ts, 599, 1)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 609, 24)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 609, 12)) +>o : Symbol(o, Decl(keyofAndIndexedAccess.ts, 609, 44)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 609, 12)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 609, 49)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 609, 24)) take<{} | null | undefined>(o[k]); ->take : Symbol(take, Decl(keyofAndIndexedAccess.ts, 604, 1)) ->o : Symbol(o, Decl(keyofAndIndexedAccess.ts, 608, 44)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 608, 49)) +>take : Symbol(take, Decl(keyofAndIndexedAccess.ts, 605, 1)) +>o : Symbol(o, Decl(keyofAndIndexedAccess.ts, 609, 44)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 609, 49)) take(o[k]); ->take : Symbol(take, Decl(keyofAndIndexedAccess.ts, 604, 1)) ->o : Symbol(o, Decl(keyofAndIndexedAccess.ts, 608, 44)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 608, 49)) +>take : Symbol(take, Decl(keyofAndIndexedAccess.ts, 605, 1)) +>o : Symbol(o, Decl(keyofAndIndexedAccess.ts, 609, 44)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 609, 49)) } // Repro from #23133 class Unbounded { ->Unbounded : Symbol(Unbounded, Decl(keyofAndIndexedAccess.ts, 611, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 615, 16)) +>Unbounded : Symbol(Unbounded, Decl(keyofAndIndexedAccess.ts, 612, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 616, 16)) foo(x: T[keyof T]) { ->foo : Symbol(Unbounded.foo, Decl(keyofAndIndexedAccess.ts, 615, 20)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 616, 8)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 615, 16)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 615, 16)) +>foo : Symbol(Unbounded.foo, Decl(keyofAndIndexedAccess.ts, 616, 20)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 617, 8)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 616, 16)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 616, 16)) let y: {} | undefined | null = x; ->y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 617, 11)) ->x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 616, 8)) +>y : Symbol(y, Decl(keyofAndIndexedAccess.ts, 618, 11)) +>x : Symbol(x, Decl(keyofAndIndexedAccess.ts, 617, 8)) } } // Repro from #23940 interface I7 { ->I7 : Symbol(I7, Decl(keyofAndIndexedAccess.ts, 619, 1)) +>I7 : Symbol(I7, Decl(keyofAndIndexedAccess.ts, 620, 1)) x: any; ->x : Symbol(I7.x, Decl(keyofAndIndexedAccess.ts, 623, 14)) +>x : Symbol(I7.x, Decl(keyofAndIndexedAccess.ts, 624, 14)) } type Foo7 = T; ->Foo7 : Symbol(Foo7, Decl(keyofAndIndexedAccess.ts, 625, 1)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 626, 10)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 626, 10)) +>Foo7 : Symbol(Foo7, Decl(keyofAndIndexedAccess.ts, 626, 1)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 627, 10)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 627, 10)) declare function f7(type: K): Foo7; ->f7 : Symbol(f7, Decl(keyofAndIndexedAccess.ts, 626, 32)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 627, 20)) ->I7 : Symbol(I7, Decl(keyofAndIndexedAccess.ts, 619, 1)) ->type : Symbol(type, Decl(keyofAndIndexedAccess.ts, 627, 40)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 627, 20)) ->Foo7 : Symbol(Foo7, Decl(keyofAndIndexedAccess.ts, 625, 1)) ->I7 : Symbol(I7, Decl(keyofAndIndexedAccess.ts, 619, 1)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 627, 20)) +>f7 : Symbol(f7, Decl(keyofAndIndexedAccess.ts, 627, 32)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 628, 20)) +>I7 : Symbol(I7, Decl(keyofAndIndexedAccess.ts, 620, 1)) +>type : Symbol(type, Decl(keyofAndIndexedAccess.ts, 628, 40)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 628, 20)) +>Foo7 : Symbol(Foo7, Decl(keyofAndIndexedAccess.ts, 626, 1)) +>I7 : Symbol(I7, Decl(keyofAndIndexedAccess.ts, 620, 1)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 628, 20)) // Repro from #21770 type Dict = { [key in T]: number }; ->Dict : Symbol(Dict, Decl(keyofAndIndexedAccess.ts, 627, 62)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 631, 10)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 631, 33)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 631, 10)) +>Dict : Symbol(Dict, Decl(keyofAndIndexedAccess.ts, 628, 62)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 632, 10)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 632, 33)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 632, 10)) type DictDict = { [key in V]: Dict }; ->DictDict : Symbol(DictDict, Decl(keyofAndIndexedAccess.ts, 631, 53)) ->V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 632, 14)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 632, 31)) ->key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 632, 55)) ->V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 632, 14)) ->Dict : Symbol(Dict, Decl(keyofAndIndexedAccess.ts, 627, 62)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 632, 31)) +>DictDict : Symbol(DictDict, Decl(keyofAndIndexedAccess.ts, 632, 53)) +>V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 633, 14)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 633, 31)) +>key : Symbol(key, Decl(keyofAndIndexedAccess.ts, 633, 55)) +>V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 633, 14)) +>Dict : Symbol(Dict, Decl(keyofAndIndexedAccess.ts, 628, 62)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 633, 31)) function ff1(dd: DictDict, k1: V, k2: T): number { ->ff1 : Symbol(ff1, Decl(keyofAndIndexedAccess.ts, 632, 76)) ->V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 634, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 634, 30)) ->dd : Symbol(dd, Decl(keyofAndIndexedAccess.ts, 634, 49)) ->DictDict : Symbol(DictDict, Decl(keyofAndIndexedAccess.ts, 631, 53)) ->V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 634, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 634, 30)) ->k1 : Symbol(k1, Decl(keyofAndIndexedAccess.ts, 634, 68)) ->V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 634, 13)) ->k2 : Symbol(k2, Decl(keyofAndIndexedAccess.ts, 634, 75)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 634, 30)) +>ff1 : Symbol(ff1, Decl(keyofAndIndexedAccess.ts, 633, 76)) +>V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 635, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 635, 30)) +>dd : Symbol(dd, Decl(keyofAndIndexedAccess.ts, 635, 49)) +>DictDict : Symbol(DictDict, Decl(keyofAndIndexedAccess.ts, 632, 53)) +>V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 635, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 635, 30)) +>k1 : Symbol(k1, Decl(keyofAndIndexedAccess.ts, 635, 68)) +>V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 635, 13)) +>k2 : Symbol(k2, Decl(keyofAndIndexedAccess.ts, 635, 75)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 635, 30)) return dd[k1][k2]; ->dd : Symbol(dd, Decl(keyofAndIndexedAccess.ts, 634, 49)) ->k1 : Symbol(k1, Decl(keyofAndIndexedAccess.ts, 634, 68)) ->k2 : Symbol(k2, Decl(keyofAndIndexedAccess.ts, 634, 75)) +>dd : Symbol(dd, Decl(keyofAndIndexedAccess.ts, 635, 49)) +>k1 : Symbol(k1, Decl(keyofAndIndexedAccess.ts, 635, 68)) +>k2 : Symbol(k2, Decl(keyofAndIndexedAccess.ts, 635, 75)) } function ff2(dd: DictDict, k1: V, k2: T): number { ->ff2 : Symbol(ff2, Decl(keyofAndIndexedAccess.ts, 636, 1)) ->V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 638, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 638, 30)) ->dd : Symbol(dd, Decl(keyofAndIndexedAccess.ts, 638, 49)) ->DictDict : Symbol(DictDict, Decl(keyofAndIndexedAccess.ts, 631, 53)) ->V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 638, 13)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 638, 30)) ->k1 : Symbol(k1, Decl(keyofAndIndexedAccess.ts, 638, 68)) ->V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 638, 13)) ->k2 : Symbol(k2, Decl(keyofAndIndexedAccess.ts, 638, 75)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 638, 30)) +>ff2 : Symbol(ff2, Decl(keyofAndIndexedAccess.ts, 637, 1)) +>V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 639, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 639, 30)) +>dd : Symbol(dd, Decl(keyofAndIndexedAccess.ts, 639, 49)) +>DictDict : Symbol(DictDict, Decl(keyofAndIndexedAccess.ts, 632, 53)) +>V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 639, 13)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 639, 30)) +>k1 : Symbol(k1, Decl(keyofAndIndexedAccess.ts, 639, 68)) +>V : Symbol(V, Decl(keyofAndIndexedAccess.ts, 639, 13)) +>k2 : Symbol(k2, Decl(keyofAndIndexedAccess.ts, 639, 75)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 639, 30)) const d: Dict = dd[k1]; ->d : Symbol(d, Decl(keyofAndIndexedAccess.ts, 639, 9)) ->Dict : Symbol(Dict, Decl(keyofAndIndexedAccess.ts, 627, 62)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 638, 30)) ->dd : Symbol(dd, Decl(keyofAndIndexedAccess.ts, 638, 49)) ->k1 : Symbol(k1, Decl(keyofAndIndexedAccess.ts, 638, 68)) +>d : Symbol(d, Decl(keyofAndIndexedAccess.ts, 640, 9)) +>Dict : Symbol(Dict, Decl(keyofAndIndexedAccess.ts, 628, 62)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 639, 30)) +>dd : Symbol(dd, Decl(keyofAndIndexedAccess.ts, 639, 49)) +>k1 : Symbol(k1, Decl(keyofAndIndexedAccess.ts, 639, 68)) return d[k2]; ->d : Symbol(d, Decl(keyofAndIndexedAccess.ts, 639, 9)) ->k2 : Symbol(k2, Decl(keyofAndIndexedAccess.ts, 638, 75)) +>d : Symbol(d, Decl(keyofAndIndexedAccess.ts, 640, 9)) +>k2 : Symbol(k2, Decl(keyofAndIndexedAccess.ts, 639, 75)) } // Repro from #26409 const cf1 = (t: T, k: K) => ->cf1 : Symbol(cf1, Decl(keyofAndIndexedAccess.ts, 645, 5)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 645, 13)) ->P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 645, 26)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 645, 65)) ->cool : Symbol(cool, Decl(keyofAndIndexedAccess.ts, 645, 48)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 645, 65)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 645, 13)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 645, 85)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 645, 13)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 645, 90)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 645, 65)) +>cf1 : Symbol(cf1, Decl(keyofAndIndexedAccess.ts, 646, 5)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 646, 13)) +>P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 646, 26)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 646, 65)) +>cool : Symbol(cool, Decl(keyofAndIndexedAccess.ts, 646, 48)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 646, 65)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 646, 13)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 646, 85)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 646, 13)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 646, 90)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 646, 65)) { const s: string = t[k]; ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 647, 9)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 645, 85)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 645, 90)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 648, 9)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 646, 85)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 646, 90)) t.cool; ->t.cool : Symbol(cool, Decl(keyofAndIndexedAccess.ts, 645, 48)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 645, 85)) ->cool : Symbol(cool, Decl(keyofAndIndexedAccess.ts, 645, 48)) +>t.cool : Symbol(cool, Decl(keyofAndIndexedAccess.ts, 646, 48)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 646, 85)) +>cool : Symbol(cool, Decl(keyofAndIndexedAccess.ts, 646, 48)) }; const cf2 = (t: T, k: K) => ->cf2 : Symbol(cf2, Decl(keyofAndIndexedAccess.ts, 651, 5)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 651, 13)) ->P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 651, 26)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 651, 54)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 651, 54)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 651, 13)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 651, 74)) ->T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 651, 13)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 651, 79)) ->K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 651, 54)) +>cf2 : Symbol(cf2, Decl(keyofAndIndexedAccess.ts, 652, 5)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 652, 13)) +>P : Symbol(P, Decl(keyofAndIndexedAccess.ts, 652, 26)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 652, 54)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 652, 54)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 652, 13)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 652, 74)) +>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 652, 13)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 652, 79)) +>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 652, 54)) { const s: string = t[k]; ->s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 653, 9)) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 651, 74)) ->k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 651, 79)) +>s : Symbol(s, Decl(keyofAndIndexedAccess.ts, 654, 9)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 652, 74)) +>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 652, 79)) t.cool; >t.cool : Symbol(cool) ->t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 651, 74)) +>t : Symbol(t, Decl(keyofAndIndexedAccess.ts, 652, 74)) >cool : Symbol(cool) }; diff --git a/tests/baselines/reference/keyofAndIndexedAccess.types b/tests/baselines/reference/keyofAndIndexedAccess.types index 2a7a19ea30cfc..be029145012b8 100644 --- a/tests/baselines/reference/keyofAndIndexedAccess.types +++ b/tests/baselines/reference/keyofAndIndexedAccess.types @@ -76,8 +76,11 @@ type K06 = keyof null; // never >K06 : never >null : null -type K07 = keyof never; // never ->K07 : never +type K07 = keyof never; // string | number | symbol +>K07 : string | number | symbol + +type K08 = keyof unknown; // never +>K08 : never type K10 = keyof Shape; // "name" | "width" | "height" | "visible" >K10 : "name" | "width" | "height" | "visible" diff --git a/tests/cases/compiler/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts b/tests/cases/compiler/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts new file mode 100644 index 0000000000000..ee583c523f0ae --- /dev/null +++ b/tests/cases/compiler/complicatedIndexedAccessKeyofReliesOnKeyofNeverUpperBound.ts @@ -0,0 +1,42 @@ +interface TextChannel { + id: string; + type: 'text'; + phoneNumber: string; +} + +interface EmailChannel { + id: string; + type: 'email'; + addres: string; +} + +type Channel = TextChannel | EmailChannel; + +export type ChannelType = Channel extends { type: infer R } ? R : never; + +type Omit = Pick< + T, + ({ [P in keyof T]: P } & { [P in K]: never } & { [x: string]: never })[keyof T] +>; + +type ChannelOfType = A extends { type: T } + ? A + : never; + + +export type NewChannel = Pick & + Partial> & { localChannelId: string }; + + +export function makeNewChannel(type: T): NewChannel> { + const localChannelId = `blahblahblah`; + return { type, localChannelId }; +} + +const newTextChannel = makeNewChannel('text'); +// This should work +newTextChannel.phoneNumber = '613-555-1234'; + +const newTextChannel2 : NewChannel = makeNewChannel('text'); +// Compare with this, which ofc works. +newTextChannel2.phoneNumber = '613-555-1234'; diff --git a/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts b/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts index b498310f13be5..56ff157a67fd0 100644 --- a/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts +++ b/tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts @@ -33,7 +33,8 @@ type K03 = keyof boolean; // "valueOf" type K04 = keyof void; // never type K05 = keyof undefined; // never type K06 = keyof null; // never -type K07 = keyof never; // never +type K07 = keyof never; // string | number | symbol +type K08 = keyof unknown; // never type K10 = keyof Shape; // "name" | "width" | "height" | "visible" type K11 = keyof Shape[]; // "length" | "toString" | ... From 420b690094723403ad27853ad19b5a46465781ab Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 15 Apr 2019 17:07:39 -0700 Subject: [PATCH 2/2] Merge similar cases --- src/compiler/checker.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 5654716b63b1d..a0636114f652f 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -9846,9 +9846,8 @@ namespace ts { maybeTypeOfKind(type, TypeFlags.InstantiableNonPrimitive) ? getIndexTypeForGenericType(type, stringsOnly) : getObjectFlags(type) & ObjectFlags.Mapped ? filterType(getConstraintTypeFromMappedType(type), t => !(noIndexSignatures && t.flags & (TypeFlags.Any | TypeFlags.String | TypeFlags.Number))) : type === wildcardType ? wildcardType : - type.flags & TypeFlags.Never ? keyofConstraintType : type.flags & TypeFlags.Unknown ? neverType : - type.flags & TypeFlags.Any ? keyofConstraintType : + type.flags & (TypeFlags.Any | TypeFlags.Never) ? keyofConstraintType : stringsOnly ? !noIndexSignatures && getIndexInfoOfType(type, IndexKind.String) ? stringType : getLiteralTypeFromProperties(type, TypeFlags.StringLiteral) : !noIndexSignatures && getIndexInfoOfType(type, IndexKind.String) ? getUnionType([stringType, numberType, getLiteralTypeFromProperties(type, TypeFlags.UniqueESSymbol)]) : !noIndexSignatures && getNonEnumNumberIndexInfo(type) ? getUnionType([numberType, getLiteralTypeFromProperties(type, TypeFlags.StringLiteral | TypeFlags.UniqueESSymbol)]) :