@@ -27,6 +27,10 @@ function assertObject(x: object) {
27
27
return x ;
28
28
}
29
29
30
+ function assertObjectOrNull ( x : object | null ) {
31
+ return x ;
32
+ }
33
+
30
34
function assertUndefined ( x : undefined ) {
31
35
return x ;
32
36
}
@@ -210,6 +214,31 @@ function fallThroughTest(x: string | number | boolean | object) {
210
214
break ;
211
215
}
212
216
}
217
+
218
+ function unknownNarrowing ( x : unknown ) {
219
+ switch ( typeof x ) {
220
+ case 'number ': assertNumber ( x ) ; return ;
221
+ case 'boolean ': assertBoolean ( x ) ; return ;
222
+ case 'function ': assertFunction ( x ) ; return ;
223
+ case 'symbol ': assertSymbol ( x ) ; return ;
224
+ case 'object ': assertObjectOrNull ( x ) ; return ;
225
+ case 'string ': assertString ( x ) ; return ;
226
+ case 'undefined ': assertUndefined ( x ) ; return ;
227
+ }
228
+ }
229
+
230
+ function keyofNarrowing < T > ( k : keyof T ) {
231
+ function assertKeyofT ( k1 : keyof T ) { }
232
+ switch ( typeof k ) {
233
+ case 'number ': assertNumber ( k ) ; assertKeyofT ( k ) ; return ;
234
+ case 'symbol ': assertSymbol ( k ) ; assertKeyofT ( k ) ; return ;
235
+ case 'string ': assertString ( k ) ; assertKeyofT ( k ) ; return ;
236
+ case 'boolean ': assertNever ( k ) ;
237
+ case 'function ': assertNever ( k ) ;
238
+ case 'object ': assertNever ( k ) ;
239
+ case 'undefined ': assertNever ( k ) ; return ;
240
+ }
241
+ }
213
242
214
243
215
244
//// [narrowingByTypeofInSwitch.js]
@@ -234,6 +263,9 @@ function assertFunction(x) {
234
263
function assertObject ( x ) {
235
264
return x ;
236
265
}
266
+ function assertObjectOrNull ( x ) {
267
+ return x ;
268
+ }
237
269
function assertUndefined ( x ) {
238
270
return x ;
239
271
}
@@ -470,3 +502,51 @@ function fallThroughTest(x) {
470
502
break ;
471
503
}
472
504
}
505
+ function unknownNarrowing ( x ) {
506
+ switch ( typeof x ) {
507
+ case 'number ':
508
+ assertNumber ( x ) ;
509
+ return ;
510
+ case 'boolean ':
511
+ assertBoolean ( x ) ;
512
+ return ;
513
+ case 'function ':
514
+ assertFunction ( x ) ;
515
+ return ;
516
+ case 'symbol ':
517
+ assertSymbol ( x ) ;
518
+ return ;
519
+ case 'object ':
520
+ assertObjectOrNull ( x ) ;
521
+ return ;
522
+ case 'string ':
523
+ assertString ( x ) ;
524
+ return ;
525
+ case 'undefined ':
526
+ assertUndefined ( x ) ;
527
+ return ;
528
+ }
529
+ }
530
+ function keyofNarrowing ( k ) {
531
+ function assertKeyofT ( k1 ) { }
532
+ switch ( typeof k ) {
533
+ case 'number ':
534
+ assertNumber ( k ) ;
535
+ assertKeyofT ( k ) ;
536
+ return ;
537
+ case 'symbol ':
538
+ assertSymbol ( k ) ;
539
+ assertKeyofT ( k ) ;
540
+ return ;
541
+ case 'string ':
542
+ assertString ( k ) ;
543
+ assertKeyofT ( k ) ;
544
+ return ;
545
+ case 'boolean ': assertNever ( k ) ;
546
+ case 'function ': assertNever ( k ) ;
547
+ case 'object ': assertNever ( k ) ;
548
+ case 'undefined ':
549
+ assertNever ( k ) ;
550
+ return ;
551
+ }
552
+ }
0 commit comments