@@ -7,7 +7,11 @@ type TypeName<T> =
7
7
T extends boolean ? "boolean" :
8
8
T extends undefined ? "undefined" :
9
9
T extends Function ? "function" :
10
- "object";
10
+ "object";
11
+ type Extracted<Struct> = {
12
+ [K in keyof Struct]: Struct[K] extends FooBar ? ExtractFooBar<Struct[K]> : Struct[K];
13
+
14
+ }
11
15
-----------------------------------
12
16
13
17
Grammar: TypeScript.tmLanguage
@@ -239,7 +243,7 @@ Grammar: TypeScript.tmLanguage
239
243
source.ts meta.type.declaration.ts keyword.operator.ternary.ts
240
244
^^
241
245
source.ts meta.type.declaration.ts
242
- > "object";
246
+ > "object";
243
247
^^^^^^^^^^^^^^^^^^^^^^^^
244
248
source.ts meta.type.declaration.ts
245
249
^
@@ -249,4 +253,114 @@ Grammar: TypeScript.tmLanguage
249
253
^
250
254
source.ts meta.type.declaration.ts string.quoted.double.ts punctuation.definition.string.end.ts
251
255
^
252
- source.ts punctuation.terminator.statement.ts
256
+ source.ts punctuation.terminator.statement.ts
257
+ ^^
258
+ source.ts
259
+ >type Extracted<Struct> = {
260
+ ^^^^
261
+ source.ts meta.type.declaration.ts storage.type.type.ts
262
+ ^
263
+ source.ts meta.type.declaration.ts
264
+ ^^^^^^^^^
265
+ source.ts meta.type.declaration.ts entity.name.type.alias.ts
266
+ ^
267
+ source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
268
+ ^^^^^^
269
+ source.ts meta.type.declaration.ts meta.type.parameters.ts entity.name.type.ts
270
+ ^
271
+ source.ts meta.type.declaration.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
272
+ ^^
273
+ source.ts meta.type.declaration.ts
274
+ ^
275
+ source.ts meta.type.declaration.ts keyword.operator.assignment.ts
276
+ ^
277
+ source.ts meta.type.declaration.ts
278
+ ^
279
+ source.ts meta.type.declaration.ts meta.object.type.ts punctuation.definition.block.ts
280
+ ^^
281
+ source.ts meta.type.declaration.ts meta.object.type.ts
282
+ > [K in keyof Struct]: Struct[K] extends FooBar ? ExtractFooBar<Struct[K]> : Struct[K];
283
+ ^
284
+ source.ts meta.type.declaration.ts meta.object.type.ts
285
+ ^
286
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts meta.brace.square.ts
287
+ ^
288
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts entity.name.type.ts
289
+ ^
290
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
291
+ ^^
292
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts keyword.operator.expression.in.ts
293
+ ^
294
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
295
+ ^^^^^
296
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts keyword.operator.expression.keyof.ts
297
+ ^
298
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts
299
+ ^^^^^^
300
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts entity.name.type.ts
301
+ ^
302
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.indexer.mappedtype.declaration.ts meta.brace.square.ts
303
+ ^
304
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts keyword.operator.type.annotation.ts
305
+ ^
306
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
307
+ ^^^^^^
308
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts entity.name.type.ts
309
+ ^
310
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
311
+ ^
312
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts entity.name.type.ts
313
+ ^
314
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
315
+ ^
316
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
317
+ ^^^^^^^
318
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts storage.modifier.ts
319
+ ^
320
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
321
+ ^^^^^^
322
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts entity.name.type.ts
323
+ ^
324
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
325
+ ^
326
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts keyword.operator.ternary.ts
327
+ ^
328
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
329
+ ^^^^^^^^^^^^^
330
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts entity.name.type.ts
331
+ ^
332
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.definition.typeparameters.begin.ts
333
+ ^^^^^^
334
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts entity.name.type.ts
335
+ ^
336
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.tuple.ts meta.brace.square.ts
337
+ ^
338
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.tuple.ts entity.name.type.ts
339
+ ^
340
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts meta.type.tuple.ts meta.brace.square.ts
341
+ ^
342
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.parameters.ts punctuation.definition.typeparameters.end.ts
343
+ ^
344
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
345
+ ^
346
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts keyword.operator.ternary.ts
347
+ ^
348
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts
349
+ ^^^^^^
350
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts entity.name.type.ts
351
+ ^
352
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
353
+ ^
354
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts entity.name.type.ts
355
+ ^
356
+ source.ts meta.type.declaration.ts meta.object.type.ts meta.type.annotation.ts meta.type.tuple.ts meta.brace.square.ts
357
+ ^
358
+ source.ts meta.type.declaration.ts meta.object.type.ts punctuation.terminator.statement.ts
359
+ ^^
360
+ source.ts meta.type.declaration.ts meta.object.type.ts
361
+ >
362
+ ^^
363
+ source.ts meta.type.declaration.ts meta.object.type.ts
364
+ >}
365
+ ^
366
+ source.ts meta.type.declaration.ts meta.object.type.ts punctuation.definition.block.ts
0 commit comments