@@ -4855,7 +4855,7 @@ namespace ts {
4855
4855
4856
4856
function getLiteralPropertyNameText(name: PropertyName) {
4857
4857
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;
4859
4859
}
4860
4860
4861
4861
/** Return the inferred type for a binding element */
@@ -6450,12 +6450,12 @@ namespace ts {
6450
6450
/**
6451
6451
* Gets the symbolic name for a late-bound member from its type.
6452
6452
*/
6453
- function getLateBoundNameFromType(type: LiteralType | UniqueESSymbolType): __String {
6453
+ function getLateBoundNameFromType(type: StringLiteralType | NumberLiteralType | UniqueESSymbolType): __String {
6454
6454
if (type.flags & TypeFlags.UniqueESSymbol) {
6455
6455
return `__@${type.symbol.escapedName}@${getSymbolId(type.symbol)}` as __String;
6456
6456
}
6457
6457
if (type.flags & (TypeFlags.StringLiteral | TypeFlags.NumberLiteral)) {
6458
- return escapeLeadingUnderscores("" + (<LiteralType >type).value);
6458
+ return escapeLeadingUnderscores("" + (<StringLiteralType | NumberLiteralType >type).value);
6459
6459
}
6460
6460
return Debug.fail();
6461
6461
}
@@ -6534,7 +6534,7 @@ namespace ts {
6534
6534
// If we have an existing early-bound member, combine its declarations so that we can
6535
6535
// report an error at each declaration.
6536
6536
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);
6538
6538
forEach(declarations, declaration => error(getNameOfDeclaration(declaration) || declaration, Diagnostics.Property_0_was_also_declared_here, name));
6539
6539
error(decl.name || decl, Diagnostics.Duplicate_property_0, name);
6540
6540
lateSymbol = createSymbol(SymbolFlags.None, memberName, CheckFlags.Late);
@@ -9814,7 +9814,7 @@ namespace ts {
9814
9814
if (accessNode) {
9815
9815
const indexNode = getIndexNodeForAccessExpression(accessNode);
9816
9816
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));
9818
9818
}
9819
9819
else if (indexType.flags & (TypeFlags.String | TypeFlags.Number)) {
9820
9820
error(indexNode, Diagnostics.Type_0_has_no_matching_index_signature_for_type_1, typeToString(objectType), typeToString(indexType));
@@ -11759,11 +11759,11 @@ namespace ts {
11759
11759
if (s & TypeFlags.StringLike && t & TypeFlags.String) return true;
11760
11760
if (s & TypeFlags.StringLiteral && s & TypeFlags.EnumLiteral &&
11761
11761
t & TypeFlags.StringLiteral && !(t & TypeFlags.EnumLiteral) &&
11762
- (<LiteralType >source).value === (<LiteralType >target).value) return true;
11762
+ (<StringLiteralType >source).value === (<StringLiteralType >target).value) return true;
11763
11763
if (s & TypeFlags.NumberLike && t & TypeFlags.Number) return true;
11764
11764
if (s & TypeFlags.NumberLiteral && s & TypeFlags.EnumLiteral &&
11765
11765
t & TypeFlags.NumberLiteral && !(t & TypeFlags.EnumLiteral) &&
11766
- (<LiteralType >source).value === (<LiteralType >target).value) return true;
11766
+ (<NumberLiteralType >source).value === (<NumberLiteralType >target).value) return true;
11767
11767
if (s & TypeFlags.BigIntLike && t & TypeFlags.BigInt) return true;
11768
11768
if (s & TypeFlags.BooleanLike && t & TypeFlags.Boolean) return true;
11769
11769
if (s & TypeFlags.ESSymbolLike && t & TypeFlags.ESSymbol) return true;
@@ -13687,8 +13687,8 @@ namespace ts {
13687
13687
// no flags for all other types (including non-falsy literal types).
13688
13688
function getFalsyFlags(type: Type): TypeFlags {
13689
13689
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 :
13692
13692
type.flags & TypeFlags.BigIntLiteral ? isZeroBigInt(<BigIntLiteralType>type) ? TypeFlags.BigIntLiteral : 0 :
13693
13693
type.flags & TypeFlags.BooleanLiteral ? (type === falseType || type === regularFalseType) ? TypeFlags.BooleanLiteral : 0 :
13694
13694
type.flags & TypeFlags.PossiblyFalsy;
@@ -13711,8 +13711,8 @@ namespace ts {
13711
13711
type === regularFalseType ||
13712
13712
type === falseType ||
13713
13713
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 ||
13716
13716
type.flags & TypeFlags.BigIntLiteral && isZeroBigInt(<BigIntLiteralType>type) ? type :
13717
13717
neverType;
13718
13718
}
@@ -15100,7 +15100,7 @@ namespace ts {
15100
15100
return strictNullChecks ? TypeFacts.StringStrictFacts : TypeFacts.StringFacts;
15101
15101
}
15102
15102
if (flags & TypeFlags.StringLiteral) {
15103
- const isEmpty = (<LiteralType >type).value === "";
15103
+ const isEmpty = (<StringLiteralType >type).value === "";
15104
15104
return strictNullChecks ?
15105
15105
isEmpty ? TypeFacts.EmptyStringStrictFacts : TypeFacts.NonEmptyStringStrictFacts :
15106
15106
isEmpty ? TypeFacts.EmptyStringFacts : TypeFacts.NonEmptyStringFacts;
@@ -15109,7 +15109,7 @@ namespace ts {
15109
15109
return strictNullChecks ? TypeFacts.NumberStrictFacts : TypeFacts.NumberFacts;
15110
15110
}
15111
15111
if (flags & TypeFlags.NumberLiteral) {
15112
- const isZero = (<LiteralType >type).value === 0;
15112
+ const isZero = (<NumberLiteralType >type).value === 0;
15113
15113
return strictNullChecks ?
15114
15114
isZero ? TypeFacts.ZeroNumberStrictFacts : TypeFacts.NonZeroNumberStrictFacts :
15115
15115
isZero ? TypeFacts.ZeroNumberFacts : TypeFacts.NonZeroNumberFacts;
0 commit comments