@@ -11211,7 +11211,7 @@ func (c *Checker) checkPrivateIdentifierPropertyAccess(leftType *Type, right *as
1121111211 return true
1121211212 }
1121311213 }
11214- c.error(right, diagnostics.Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier, diagName, scanner.DeclarationNameToString (typeClass.Name ()))
11214+ c.error(right, diagnostics.Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier, diagName, c.SymbolToString (typeClass.Symbol ()))
1121511215 return true
1121611216 }
1121711217 return false
@@ -22552,17 +22552,75 @@ func (c *Checker) getTypeFromTypeReference(node *ast.Node) *Type {
2255222552 if links.resolvedType == nil {
2255322553 // Cache both the resolved symbol and the resolved type. The resolved symbol is needed when we check the
2255422554 // type reference in checkTypeReferenceNode.
22555- symbol := c.getSymbolFromTypeReference(node)
2255622555 // handle LS queries on the `const` in `x as const` by resolving to the type of `x`
2255722556 if isConstTypeReference(node) && ast.IsAssertionExpression(node.Parent) {
2255822557 links.resolvedType = c.checkExpressionCached(node.Parent.Expression())
22558+ } else if t := c.getIntendedTypeFromJSDocTypeReference(node); t != nil {
22559+ links.resolvedType = t
2255922560 } else {
22560- links.resolvedType = c.getTypeReferenceType(node, symbol )
22561+ links.resolvedType = c.getTypeReferenceType(node, c.getSymbolFromTypeReference(node) )
2256122562 }
2256222563 }
2256322564 return links.resolvedType
2256422565}
2256522566
22567+ func (c *Checker) getIntendedTypeFromJSDocTypeReference(node *ast.Node) *Type {
22568+ if node.Flags&ast.NodeFlagsJSDoc != 0 && ast.IsTypeReferenceNode(node) {
22569+ typeName := node.AsTypeReferenceNode().TypeName
22570+ if ast.IsIdentifier(typeName) {
22571+ typeArgs := node.TypeArguments()
22572+ switch typeName.Text() {
22573+ case "String":
22574+ c.checkNoTypeArguments(node, nil)
22575+ return c.stringType
22576+ case "Number":
22577+ c.checkNoTypeArguments(node, nil)
22578+ return c.numberType
22579+ case "BigInt":
22580+ c.checkNoTypeArguments(node, nil)
22581+ return c.bigintType
22582+ case "Boolean":
22583+ c.checkNoTypeArguments(node, nil)
22584+ return c.booleanType
22585+ case "Void":
22586+ c.checkNoTypeArguments(node, nil)
22587+ return c.voidType
22588+ case "Undefined":
22589+ c.checkNoTypeArguments(node, nil)
22590+ return c.undefinedType
22591+ case "Null":
22592+ c.checkNoTypeArguments(node, nil)
22593+ return c.nullType
22594+ case "Function", "function":
22595+ c.checkNoTypeArguments(node, nil)
22596+ return c.globalFunctionType
22597+ case "array":
22598+ if len(typeArgs) == 0 && !c.noImplicitAny {
22599+ return c.anyArrayType
22600+ }
22601+ case "promise":
22602+ if len(typeArgs) == 0 && !c.noImplicitAny {
22603+ return c.createPromiseType(c.anyType)
22604+ }
22605+ case "Object":
22606+ if len(typeArgs) == 2 {
22607+ if recordSymbol := c.getGlobalRecordSymbol(); recordSymbol != nil {
22608+ if indexType := c.getTypeFromTypeNode(typeArgs[0]); c.isValidIndexKeyType(indexType) {
22609+ return c.getTypeAliasInstantiation(recordSymbol, []*Type{indexType, c.getTypeFromTypeNode(typeArgs[1])}, nil)
22610+ }
22611+ }
22612+ return c.anyType
22613+ }
22614+ if !c.noImplicitAny {
22615+ c.checkNoTypeArguments(node, nil)
22616+ return c.anyType
22617+ }
22618+ }
22619+ }
22620+ }
22621+ return nil
22622+ }
22623+
2256622624func (c *Checker) getSymbolFromTypeReference(node *ast.Node) *ast.Symbol {
2256722625 links := c.symbolNodeLinks.Get(node)
2256822626 if links.resolvedSymbol == nil {
@@ -22710,7 +22768,13 @@ func (c *Checker) getTypeArgumentsFromNode(node *ast.Node) []*Type {
2271022768
2271122769func (c *Checker) checkNoTypeArguments(node *ast.Node, symbol *ast.Symbol) bool {
2271222770 if len(node.TypeArguments()) != 0 {
22713- c.error(node, diagnostics.Type_0_is_not_generic, c.symbolToString(symbol))
22771+ var typeName string
22772+ if symbol != nil {
22773+ typeName = c.symbolToString(symbol)
22774+ } else {
22775+ typeName = scanner.DeclarationNameToString(node.AsTypeReferenceNode().TypeName)
22776+ }
22777+ c.error(node, diagnostics.Type_0_is_not_generic, typeName)
2271422778 return false
2271522779 }
2271622780 return true
0 commit comments