@@ -4855,7 +4855,7 @@ namespace ts {
48554855
48564856 function getLiteralPropertyNameText(name: PropertyName) {
48574857 const type = getLiteralTypeFromPropertyName(name);
4858- return type.flags & (TypeFlags.StringLiteral | TypeFlags.NumberLiteral) ? "" + (<LiteralType >type).value : undefined;
4858+ return type.flags & (TypeFlags.StringLiteral | TypeFlags.NumberLiteral) ? "" + (<StringLiteralType | NumberLiteralType >type).value : undefined;
48594859 }
48604860
48614861 /** Return the inferred type for a binding element */
@@ -6450,12 +6450,12 @@ namespace ts {
64506450 /**
64516451 * Gets the symbolic name for a late-bound member from its type.
64526452 */
6453- function getLateBoundNameFromType(type: LiteralType | UniqueESSymbolType): __String {
6453+ function getLateBoundNameFromType(type: StringLiteralType | NumberLiteralType | UniqueESSymbolType): __String {
64546454 if (type.flags & TypeFlags.UniqueESSymbol) {
64556455 return `__@${type.symbol.escapedName}@${getSymbolId(type.symbol)}` as __String;
64566456 }
64576457 if (type.flags & (TypeFlags.StringLiteral | TypeFlags.NumberLiteral)) {
6458- return escapeLeadingUnderscores("" + (<LiteralType >type).value);
6458+ return escapeLeadingUnderscores("" + (<StringLiteralType | NumberLiteralType >type).value);
64596459 }
64606460 return Debug.fail();
64616461 }
@@ -6534,7 +6534,7 @@ namespace ts {
65346534 // If we have an existing early-bound member, combine its declarations so that we can
65356535 // report an error at each declaration.
65366536 const declarations = earlySymbol ? concatenate(earlySymbol.declarations, lateSymbol.declarations) : lateSymbol.declarations;
6537- const name = (<LiteralType> type).value || declarationNameToString(decl.name);
6537+ const name = !( type.flags & TypeFlags.UniqueESSymbol) && unescapeLeadingUnderscores(memberName) || declarationNameToString(decl.name);
65386538 forEach(declarations, declaration => error(getNameOfDeclaration(declaration) || declaration, Diagnostics.Property_0_was_also_declared_here, name));
65396539 error(decl.name || decl, Diagnostics.Duplicate_property_0, name);
65406540 lateSymbol = createSymbol(SymbolFlags.None, memberName, CheckFlags.Late);
@@ -9814,7 +9814,7 @@ namespace ts {
98149814 if (accessNode) {
98159815 const indexNode = getIndexNodeForAccessExpression(accessNode);
98169816 if (indexType.flags & (TypeFlags.StringLiteral | TypeFlags.NumberLiteral)) {
9817- error(indexNode, Diagnostics.Property_0_does_not_exist_on_type_1, "" + (<LiteralType >indexType).value, typeToString(objectType));
9817+ error(indexNode, Diagnostics.Property_0_does_not_exist_on_type_1, "" + (<StringLiteralType | NumberLiteralType >indexType).value, typeToString(objectType));
98189818 }
98199819 else if (indexType.flags & (TypeFlags.String | TypeFlags.Number)) {
98209820 error(indexNode, Diagnostics.Type_0_has_no_matching_index_signature_for_type_1, typeToString(objectType), typeToString(indexType));
@@ -11759,11 +11759,11 @@ namespace ts {
1175911759 if (s & TypeFlags.StringLike && t & TypeFlags.String) return true;
1176011760 if (s & TypeFlags.StringLiteral && s & TypeFlags.EnumLiteral &&
1176111761 t & TypeFlags.StringLiteral && !(t & TypeFlags.EnumLiteral) &&
11762- (<LiteralType >source).value === (<LiteralType >target).value) return true;
11762+ (<StringLiteralType >source).value === (<StringLiteralType >target).value) return true;
1176311763 if (s & TypeFlags.NumberLike && t & TypeFlags.Number) return true;
1176411764 if (s & TypeFlags.NumberLiteral && s & TypeFlags.EnumLiteral &&
1176511765 t & TypeFlags.NumberLiteral && !(t & TypeFlags.EnumLiteral) &&
11766- (<LiteralType >source).value === (<LiteralType >target).value) return true;
11766+ (<NumberLiteralType >source).value === (<NumberLiteralType >target).value) return true;
1176711767 if (s & TypeFlags.BigIntLike && t & TypeFlags.BigInt) return true;
1176811768 if (s & TypeFlags.BooleanLike && t & TypeFlags.Boolean) return true;
1176911769 if (s & TypeFlags.ESSymbolLike && t & TypeFlags.ESSymbol) return true;
@@ -13687,8 +13687,8 @@ namespace ts {
1368713687 // no flags for all other types (including non-falsy literal types).
1368813688 function getFalsyFlags(type: Type): TypeFlags {
1368913689 return type.flags & TypeFlags.Union ? getFalsyFlagsOfTypes((<UnionType>type).types) :
13690- type.flags & TypeFlags.StringLiteral ? (<LiteralType >type).value === "" ? TypeFlags.StringLiteral : 0 :
13691- type.flags & TypeFlags.NumberLiteral ? (<LiteralType >type).value === 0 ? TypeFlags.NumberLiteral : 0 :
13690+ type.flags & TypeFlags.StringLiteral ? (<StringLiteralType >type).value === "" ? TypeFlags.StringLiteral : 0 :
13691+ type.flags & TypeFlags.NumberLiteral ? (<NumberLiteralType >type).value === 0 ? TypeFlags.NumberLiteral : 0 :
1369213692 type.flags & TypeFlags.BigIntLiteral ? isZeroBigInt(<BigIntLiteralType>type) ? TypeFlags.BigIntLiteral : 0 :
1369313693 type.flags & TypeFlags.BooleanLiteral ? (type === falseType || type === regularFalseType) ? TypeFlags.BooleanLiteral : 0 :
1369413694 type.flags & TypeFlags.PossiblyFalsy;
@@ -13711,8 +13711,8 @@ namespace ts {
1371113711 type === regularFalseType ||
1371213712 type === falseType ||
1371313713 type.flags & (TypeFlags.Void | TypeFlags.Undefined | TypeFlags.Null) ||
13714- type.flags & TypeFlags.StringLiteral && (<LiteralType >type).value === "" ||
13715- type.flags & TypeFlags.NumberLiteral && (<LiteralType >type).value === 0 ||
13714+ type.flags & TypeFlags.StringLiteral && (<StringLiteralType >type).value === "" ||
13715+ type.flags & TypeFlags.NumberLiteral && (<NumberLiteralType >type).value === 0 ||
1371613716 type.flags & TypeFlags.BigIntLiteral && isZeroBigInt(<BigIntLiteralType>type) ? type :
1371713717 neverType;
1371813718 }
@@ -15100,7 +15100,7 @@ namespace ts {
1510015100 return strictNullChecks ? TypeFacts.StringStrictFacts : TypeFacts.StringFacts;
1510115101 }
1510215102 if (flags & TypeFlags.StringLiteral) {
15103- const isEmpty = (<LiteralType >type).value === "";
15103+ const isEmpty = (<StringLiteralType >type).value === "";
1510415104 return strictNullChecks ?
1510515105 isEmpty ? TypeFacts.EmptyStringStrictFacts : TypeFacts.NonEmptyStringStrictFacts :
1510615106 isEmpty ? TypeFacts.EmptyStringFacts : TypeFacts.NonEmptyStringFacts;
@@ -15109,7 +15109,7 @@ namespace ts {
1510915109 return strictNullChecks ? TypeFacts.NumberStrictFacts : TypeFacts.NumberFacts;
1511015110 }
1511115111 if (flags & TypeFlags.NumberLiteral) {
15112- const isZero = (<LiteralType >type).value === 0;
15112+ const isZero = (<NumberLiteralType >type).value === 0;
1511315113 return strictNullChecks ?
1511415114 isZero ? TypeFacts.ZeroNumberStrictFacts : TypeFacts.NonZeroNumberStrictFacts :
1511515115 isZero ? TypeFacts.ZeroNumberFacts : TypeFacts.NonZeroNumberFacts;
0 commit comments