@@ -748,14 +748,22 @@ export class Resolver extends DiagnosticEmitter {
748
748
return null ;
749
749
}
750
750
let arrayType = indexedGet . signature . returnType ;
751
+
751
752
// }
752
- if ( ! ( target = arrayType . classReference ) ) {
753
- this . error (
754
- DiagnosticCode . Property_0_does_not_exist_on_type_1 ,
755
- propertyAccess . property . range , propertyName , arrayType . toString ( )
756
- ) ;
757
- return null ;
753
+ let classReference = arrayType . classReference ;
754
+ if ( ! classReference ) {
755
+ let typeClasses = this . program . typeClasses ;
756
+ if ( ! arrayType . is ( TypeFlags . REFERENCE ) && typeClasses . has ( arrayType . kind ) ) {
757
+ classReference = typeClasses . get ( arrayType . kind ) ! ;
758
+ } else {
759
+ this . error (
760
+ DiagnosticCode . Property_0_does_not_exist_on_type_1 ,
761
+ propertyAccess . property . range , propertyName , arrayType . toString ( )
762
+ ) ;
763
+ return null ;
764
+ }
758
765
}
766
+ target = classReference ;
759
767
}
760
768
break ;
761
769
}
@@ -1333,6 +1341,7 @@ export class Resolver extends DiagnosticEmitter {
1333
1341
contextualType ,
1334
1342
reportMode
1335
1343
) ;
1344
+
1336
1345
if ( ! target ) return null ;
1337
1346
if ( target . kind == ElementKind . FUNCTION_PROTOTYPE ) {
1338
1347
// `unchecked(expr: *): *` is special
@@ -1365,6 +1374,11 @@ export class Resolver extends DiagnosticEmitter {
1365
1374
// reuse resolvedThisExpression (might be property access)
1366
1375
// reuse resolvedElementExpression (might be element access)
1367
1376
return functionTarget ;
1377
+ } else {
1378
+ let typeClasses = this . program . typeClasses ;
1379
+ if ( ! returnType . is ( TypeFlags . REFERENCE ) && typeClasses . has ( returnType . kind ) ) {
1380
+ return typeClasses . get ( returnType . kind ) ;
1381
+ }
1368
1382
}
1369
1383
}
1370
1384
if ( reportMode == ReportMode . REPORT ) {
0 commit comments