Skip to content

⬅️ Back to Table of Contents

📄 propertyTypes

📊 Analysis Summary

Metric Count
🔧 Functions 5

📚 Table of Contents

🛠️ File Location:

📂 packages/type-utils/src/propertyTypes.ts

Functions

getTypeOfPropertyOfName(checker: ts.TypeChecker, type: ts.Type, name: string, escapedName: ts.__String): ts.Type | undefined

Parameters:

  • checker ts.TypeChecker
  • type ts.Type
  • name string
  • escapedName ts.__String

Returns: ts.Type | undefined

Calls:

  • isSymbol
  • checker.getTypeOfPropertyOfType
  • type .getProperties() .find
  • checker.getDeclaredTypeOfSymbol

Internal Comments:

// Most names are directly usable in the checker and aren't different from escaped names
// Symbolic names may differ in their escaped name compared to their human-readable name (x2)
// https://github.com/typescript-eslint/typescript-eslint/issues/2143 (x2)

Code
export function getTypeOfPropertyOfName(
  checker: ts.TypeChecker,
  type: ts.Type,
  name: string,
  escapedName?: ts.__String,
): ts.Type | undefined {
  // Most names are directly usable in the checker and aren't different from escaped names
  if (!escapedName || !isSymbol(escapedName)) {
    return checker.getTypeOfPropertyOfType(type, name);
  }

  // Symbolic names may differ in their escaped name compared to their human-readable name
  // https://github.com/typescript-eslint/typescript-eslint/issues/2143
  const escapedProperty = type
    .getProperties()
    .find(property => property.escapedName === escapedName);

  return escapedProperty
    ? checker.getDeclaredTypeOfSymbol(escapedProperty)
    : undefined;
}

getTypeOfPropertyOfType(checker: ts.TypeChecker, type: ts.Type, property: ts.Symbol): ts.Type | undefined

Parameters:

  • checker ts.TypeChecker
  • type ts.Type
  • property ts.Symbol

Returns: ts.Type | undefined

Calls:

  • getTypeOfPropertyOfName
  • property.getName
  • property.getEscapedName
Code
export function getTypeOfPropertyOfType(
  checker: ts.TypeChecker,
  type: ts.Type,
  property: ts.Symbol,
): ts.Type | undefined {
  return getTypeOfPropertyOfName(
    checker,
    type,
    property.getName(),
    property.getEscapedName(),
  );
}

isSymbol(escapedName: string): boolean

Parameters:

  • escapedName string

Returns: boolean

Calls:

  • isKnownSymbol
  • isPrivateIdentifierSymbol
Code
function isSymbol(escapedName: string): boolean {
  return isKnownSymbol(escapedName) || isPrivateIdentifierSymbol(escapedName);
}

isKnownSymbol(escapedName: string): boolean

Parameters:

  • escapedName string

Returns: boolean

Calls:

  • escapedName.startsWith
Code
function isKnownSymbol(escapedName: string): boolean {
  return escapedName.startsWith('__@');
}

isPrivateIdentifierSymbol(escapedName: string): boolean

Parameters:

  • escapedName string

Returns: boolean

Calls:

  • escapedName.startsWith
Code
function isPrivateIdentifierSymbol(escapedName: string): boolean {
  return escapedName.startsWith('__#');
}

Generated by Syntax Scribe