1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
|
=== tests/cases/compiler/neverAsDiscriminantType.ts ===
type Foo1 = { kind: 'a', a: number } | { kind: 'b' } | { kind: never };
>Foo1 : Symbol(Foo1, Decl(neverAsDiscriminantType.ts, 0, 0))
>kind : Symbol(kind, Decl(neverAsDiscriminantType.ts, 0, 13))
>a : Symbol(a, Decl(neverAsDiscriminantType.ts, 0, 24))
>kind : Symbol(kind, Decl(neverAsDiscriminantType.ts, 0, 40))
>kind : Symbol(kind, Decl(neverAsDiscriminantType.ts, 0, 56))
function f1(foo: Foo1) {
>f1 : Symbol(f1, Decl(neverAsDiscriminantType.ts, 0, 71))
>foo : Symbol(foo, Decl(neverAsDiscriminantType.ts, 2, 12))
>Foo1 : Symbol(Foo1, Decl(neverAsDiscriminantType.ts, 0, 0))
if (foo.kind === 'a') {
>foo.kind : Symbol(kind, Decl(neverAsDiscriminantType.ts, 0, 13), Decl(neverAsDiscriminantType.ts, 0, 40), Decl(neverAsDiscriminantType.ts, 0, 56))
>foo : Symbol(foo, Decl(neverAsDiscriminantType.ts, 2, 12))
>kind : Symbol(kind, Decl(neverAsDiscriminantType.ts, 0, 13), Decl(neverAsDiscriminantType.ts, 0, 40), Decl(neverAsDiscriminantType.ts, 0, 56))
foo.a;
>foo.a : Symbol(a, Decl(neverAsDiscriminantType.ts, 0, 24))
>foo : Symbol(foo, Decl(neverAsDiscriminantType.ts, 2, 12))
>a : Symbol(a, Decl(neverAsDiscriminantType.ts, 0, 24))
}
}
type Foo2 = { kind?: 'a', a: number } | { kind?: 'b' } | { kind?: never };
>Foo2 : Symbol(Foo2, Decl(neverAsDiscriminantType.ts, 6, 1))
>kind : Symbol(kind, Decl(neverAsDiscriminantType.ts, 8, 13))
>a : Symbol(a, Decl(neverAsDiscriminantType.ts, 8, 25))
>kind : Symbol(kind, Decl(neverAsDiscriminantType.ts, 8, 41))
>kind : Symbol(kind, Decl(neverAsDiscriminantType.ts, 8, 58))
function f2(foo: Foo2) {
>f2 : Symbol(f2, Decl(neverAsDiscriminantType.ts, 8, 74))
>foo : Symbol(foo, Decl(neverAsDiscriminantType.ts, 10, 12))
>Foo2 : Symbol(Foo2, Decl(neverAsDiscriminantType.ts, 6, 1))
if (foo.kind === 'a') {
>foo.kind : Symbol(kind, Decl(neverAsDiscriminantType.ts, 8, 13), Decl(neverAsDiscriminantType.ts, 8, 41), Decl(neverAsDiscriminantType.ts, 8, 58))
>foo : Symbol(foo, Decl(neverAsDiscriminantType.ts, 10, 12))
>kind : Symbol(kind, Decl(neverAsDiscriminantType.ts, 8, 13), Decl(neverAsDiscriminantType.ts, 8, 41), Decl(neverAsDiscriminantType.ts, 8, 58))
foo.a;
>foo.a : Symbol(a, Decl(neverAsDiscriminantType.ts, 8, 25))
>foo : Symbol(foo, Decl(neverAsDiscriminantType.ts, 10, 12))
>a : Symbol(a, Decl(neverAsDiscriminantType.ts, 8, 25))
}
}
// Repro from #50716
export interface GatewayPayloadStructure<O extends GatewayOpcode, T extends keyof GatewayEvents, D> {
>GatewayPayloadStructure : Symbol(GatewayPayloadStructure, Decl(neverAsDiscriminantType.ts, 14, 1))
>O : Symbol(O, Decl(neverAsDiscriminantType.ts, 18, 41))
>GatewayOpcode : Symbol(GatewayOpcode, Decl(neverAsDiscriminantType.ts, 35, 1))
>T : Symbol(T, Decl(neverAsDiscriminantType.ts, 18, 65))
>GatewayEvents : Symbol(GatewayEvents, Decl(neverAsDiscriminantType.ts, 49, 1))
>D : Symbol(D, Decl(neverAsDiscriminantType.ts, 18, 96))
op: O
>op : Symbol(GatewayPayloadStructure.op, Decl(neverAsDiscriminantType.ts, 18, 101))
>O : Symbol(O, Decl(neverAsDiscriminantType.ts, 18, 41))
d: D
>d : Symbol(GatewayPayloadStructure.d, Decl(neverAsDiscriminantType.ts, 19, 9))
>D : Symbol(D, Decl(neverAsDiscriminantType.ts, 18, 96))
t?: T
>t : Symbol(GatewayPayloadStructure.t, Decl(neverAsDiscriminantType.ts, 20, 8))
>T : Symbol(T, Decl(neverAsDiscriminantType.ts, 18, 65))
s?: number
>s : Symbol(GatewayPayloadStructure.s, Decl(neverAsDiscriminantType.ts, 21, 9))
}
export type GatewayPayload = {
>GatewayPayload : Symbol(GatewayPayload, Decl(neverAsDiscriminantType.ts, 23, 1))
[O in GatewayOpcode]: O extends GatewayOpcode.DISPATCH
>O : Symbol(O, Decl(neverAsDiscriminantType.ts, 26, 5))
>GatewayOpcode : Symbol(GatewayOpcode, Decl(neverAsDiscriminantType.ts, 35, 1))
>O : Symbol(O, Decl(neverAsDiscriminantType.ts, 26, 5))
>GatewayOpcode : Symbol(GatewayOpcode, Decl(neverAsDiscriminantType.ts, 35, 1))
>DISPATCH : Symbol(GatewayOpcode.DISPATCH, Decl(neverAsDiscriminantType.ts, 37, 27))
? {
[T in keyof GatewayEvents]: GatewayPayloadStructure<GatewayOpcode.DISPATCH, T, GatewayEvents[T]>
>T : Symbol(T, Decl(neverAsDiscriminantType.ts, 28, 9))
>GatewayEvents : Symbol(GatewayEvents, Decl(neverAsDiscriminantType.ts, 49, 1))
>GatewayPayloadStructure : Symbol(GatewayPayloadStructure, Decl(neverAsDiscriminantType.ts, 14, 1))
>GatewayOpcode : Symbol(GatewayOpcode, Decl(neverAsDiscriminantType.ts, 35, 1))
>DISPATCH : Symbol(GatewayOpcode.DISPATCH, Decl(neverAsDiscriminantType.ts, 37, 27))
>T : Symbol(T, Decl(neverAsDiscriminantType.ts, 28, 9))
>GatewayEvents : Symbol(GatewayEvents, Decl(neverAsDiscriminantType.ts, 49, 1))
>T : Symbol(T, Decl(neverAsDiscriminantType.ts, 28, 9))
}[keyof GatewayEvents]
>GatewayEvents : Symbol(GatewayEvents, Decl(neverAsDiscriminantType.ts, 49, 1))
: GatewayPayloadStructure<O, never, O extends keyof GatewayParams ? GatewayParams[O] : never>
>GatewayPayloadStructure : Symbol(GatewayPayloadStructure, Decl(neverAsDiscriminantType.ts, 14, 1))
>O : Symbol(O, Decl(neverAsDiscriminantType.ts, 26, 5))
>O : Symbol(O, Decl(neverAsDiscriminantType.ts, 26, 5))
>GatewayParams : Symbol(GatewayParams, Decl(neverAsDiscriminantType.ts, 31, 16))
>GatewayParams : Symbol(GatewayParams, Decl(neverAsDiscriminantType.ts, 31, 16))
>O : Symbol(O, Decl(neverAsDiscriminantType.ts, 26, 5))
}[GatewayOpcode]
>GatewayOpcode : Symbol(GatewayOpcode, Decl(neverAsDiscriminantType.ts, 35, 1))
export interface GatewayParams {
>GatewayParams : Symbol(GatewayParams, Decl(neverAsDiscriminantType.ts, 31, 16))
[GatewayOpcode.HELLO]: { b: 1 }
>[GatewayOpcode.HELLO] : Symbol(GatewayParams[GatewayOpcode.HELLO], Decl(neverAsDiscriminantType.ts, 33, 32))
>GatewayOpcode.HELLO : Symbol(GatewayOpcode.HELLO, Decl(neverAsDiscriminantType.ts, 46, 24))
>GatewayOpcode : Symbol(GatewayOpcode, Decl(neverAsDiscriminantType.ts, 35, 1))
>HELLO : Symbol(GatewayOpcode.HELLO, Decl(neverAsDiscriminantType.ts, 46, 24))
>b : Symbol(b, Decl(neverAsDiscriminantType.ts, 34, 28))
}
export enum GatewayOpcode {
>GatewayOpcode : Symbol(GatewayOpcode, Decl(neverAsDiscriminantType.ts, 35, 1))
DISPATCH = 0,
>DISPATCH : Symbol(GatewayOpcode.DISPATCH, Decl(neverAsDiscriminantType.ts, 37, 27))
HEARTBEAT = 1,
>HEARTBEAT : Symbol(GatewayOpcode.HEARTBEAT, Decl(neverAsDiscriminantType.ts, 38, 17))
IDENTIFY = 2,
>IDENTIFY : Symbol(GatewayOpcode.IDENTIFY, Decl(neverAsDiscriminantType.ts, 39, 18))
PRESENCE_UPDATE = 3,
>PRESENCE_UPDATE : Symbol(GatewayOpcode.PRESENCE_UPDATE, Decl(neverAsDiscriminantType.ts, 40, 17))
VOICE_STATE_UPDATE = 4,
>VOICE_STATE_UPDATE : Symbol(GatewayOpcode.VOICE_STATE_UPDATE, Decl(neverAsDiscriminantType.ts, 41, 24))
RESUME = 6,
>RESUME : Symbol(GatewayOpcode.RESUME, Decl(neverAsDiscriminantType.ts, 42, 27))
RECONNECT = 7,
>RECONNECT : Symbol(GatewayOpcode.RECONNECT, Decl(neverAsDiscriminantType.ts, 43, 15))
REQUEST_GUILD_MEMBERS = 8,
>REQUEST_GUILD_MEMBERS : Symbol(GatewayOpcode.REQUEST_GUILD_MEMBERS, Decl(neverAsDiscriminantType.ts, 44, 18))
INVALID_SESSION = 9,
>INVALID_SESSION : Symbol(GatewayOpcode.INVALID_SESSION, Decl(neverAsDiscriminantType.ts, 45, 30))
HELLO = 10,
>HELLO : Symbol(GatewayOpcode.HELLO, Decl(neverAsDiscriminantType.ts, 46, 24))
HEARTBEAT_ACK = 11,
>HEARTBEAT_ACK : Symbol(GatewayOpcode.HEARTBEAT_ACK, Decl(neverAsDiscriminantType.ts, 47, 15))
}
export interface GatewayEvents {
>GatewayEvents : Symbol(GatewayEvents, Decl(neverAsDiscriminantType.ts, 49, 1))
MESSAGE_CREATE: { a: 1 }
>MESSAGE_CREATE : Symbol(GatewayEvents.MESSAGE_CREATE, Decl(neverAsDiscriminantType.ts, 51, 32))
>a : Symbol(a, Decl(neverAsDiscriminantType.ts, 52, 21))
MESSAGE_UPDATE: { a: 2 }
>MESSAGE_UPDATE : Symbol(GatewayEvents.MESSAGE_UPDATE, Decl(neverAsDiscriminantType.ts, 52, 28))
>a : Symbol(a, Decl(neverAsDiscriminantType.ts, 53, 21))
MESSAGE_DELETE: { a: 3 }
>MESSAGE_DELETE : Symbol(GatewayEvents.MESSAGE_DELETE, Decl(neverAsDiscriminantType.ts, 53, 28))
>a : Symbol(a, Decl(neverAsDiscriminantType.ts, 54, 21))
}
function assertMessage(event: { a: 1 }) { }
>assertMessage : Symbol(assertMessage, Decl(neverAsDiscriminantType.ts, 55, 1))
>event : Symbol(event, Decl(neverAsDiscriminantType.ts, 57, 23))
>a : Symbol(a, Decl(neverAsDiscriminantType.ts, 57, 31))
export async function adaptSession(input: GatewayPayload) {
>adaptSession : Symbol(adaptSession, Decl(neverAsDiscriminantType.ts, 57, 43))
>input : Symbol(input, Decl(neverAsDiscriminantType.ts, 59, 35))
>GatewayPayload : Symbol(GatewayPayload, Decl(neverAsDiscriminantType.ts, 23, 1))
if (input.t === 'MESSAGE_CREATE') {
>input.t : Symbol(GatewayPayloadStructure.t, Decl(neverAsDiscriminantType.ts, 20, 8), Decl(neverAsDiscriminantType.ts, 20, 8), Decl(neverAsDiscriminantType.ts, 20, 8), Decl(neverAsDiscriminantType.ts, 20, 8), Decl(neverAsDiscriminantType.ts, 20, 8) ... and 8 more)
>input : Symbol(input, Decl(neverAsDiscriminantType.ts, 59, 35))
>t : Symbol(GatewayPayloadStructure.t, Decl(neverAsDiscriminantType.ts, 20, 8), Decl(neverAsDiscriminantType.ts, 20, 8), Decl(neverAsDiscriminantType.ts, 20, 8), Decl(neverAsDiscriminantType.ts, 20, 8), Decl(neverAsDiscriminantType.ts, 20, 8) ... and 8 more)
assertMessage(input.d)
>assertMessage : Symbol(assertMessage, Decl(neverAsDiscriminantType.ts, 55, 1))
>input.d : Symbol(GatewayPayloadStructure.d, Decl(neverAsDiscriminantType.ts, 19, 9))
>input : Symbol(input, Decl(neverAsDiscriminantType.ts, 59, 35))
>d : Symbol(GatewayPayloadStructure.d, Decl(neverAsDiscriminantType.ts, 19, 9))
}
}
|