@@ -8948,15 +8948,15 @@ namespace ts {
8948
8948
type.resolvedIndexType || (type.resolvedIndexType = createIndexType(type, /*stringsOnly*/ false));
8949
8949
}
8950
8950
8951
- function guardedBigInt(value: string | number, node?: Node): bigint | number {
8951
+ function guardedBigInt(value: string | number, node?: Node): number {
8952
8952
if (typeof BigInt === "undefined") { // error and fall back to number parsing
8953
8953
error(node, Diagnostics.Cannot_evaluate_bigint_literal_because_the_compiler_is_running_in_an_environment_without_bigint_support);
8954
8954
return +value;
8955
8955
}
8956
8956
return BigInt(value);
8957
8957
}
8958
8958
8959
- function getNumericLiteralValue(node: NumericLiteral): number | bigint {
8959
+ function getNumericLiteralValue(node: NumericLiteral): number {
8960
8960
return node.numericLiteralFlags & TokenFlags.BigInt
8961
8961
? guardedBigInt(node.text.slice(0, -1), node) // leave off trailing "n"
8962
8962
: +node.text;
@@ -9639,7 +9639,7 @@ namespace ts {
9639
9639
return prop.flags & SymbolFlags.Method && find(prop.declarations, decl => isClassLike(decl.parent));
9640
9640
}
9641
9641
9642
- function createLiteralType(flags: TypeFlags, value: string | number | bigint , symbol: Symbol | undefined) {
9642
+ function createLiteralType(flags: TypeFlags, value: string | number, symbol: Symbol | undefined) {
9643
9643
const type = <LiteralType>createType(flags);
9644
9644
type.symbol = symbol!;
9645
9645
type.value = value;
@@ -9664,17 +9664,17 @@ namespace ts {
9664
9664
type;
9665
9665
}
9666
9666
9667
- function getLiteralType(value: string | number | bigint , enumId?: number, symbol?: Symbol) {
9667
+ function getLiteralType(value: string | number, enumId?: number, symbol?: Symbol) {
9668
9668
// We store all literal types in a single map with keys of the form '#NNN' and '@SSS',
9669
9669
// where NNN is the text representation of a numeric literal and SSS are the characters
9670
9670
// of a string literal. For literal enum members we use 'EEE#NNN' and 'EEE@SSS', where
9671
9671
// EEE is a unique id for the containing enum type.
9672
- const qualifier = typeof value === "number" ? "#" : typeof value === "bigint" ? "n" : "@";
9672
+ const qualifier = typeof value === "number" ? "#" : typeof value as string === "bigint" ? "n" : "@";
9673
9673
const key = enumId ? enumId + qualifier + value : qualifier + value;
9674
9674
let type = literalTypes.get(key);
9675
9675
if (!type) {
9676
9676
const flags = (typeof value === "number" ? TypeFlags.NumberLiteral :
9677
- typeof value === "bigint" ? TypeFlags.BigIntLiteral : TypeFlags.StringLiteral) |
9677
+ typeof value as string === "bigint" ? TypeFlags.BigIntLiteral : TypeFlags.StringLiteral) |
9678
9678
(enumId ? TypeFlags.EnumLiteral : 0);
9679
9679
literalTypes.set(key, type = createLiteralType(flags, value, symbol));
9680
9680
}
@@ -25761,7 +25761,7 @@ namespace ts {
25761
25761
const initializer = member.initializer!;
25762
25762
let value = enumKind === EnumKind.Literal && !isLiteralEnumMember(member) ? undefined : evaluate(initializer);
25763
25763
if (value !== undefined) {
25764
- if (typeof value === "bigint") {
25764
+ if (typeof value as string === "bigint") {
25765
25765
value = Number(value);
25766
25766
}
25767
25767
if (isConstEnum && typeof value === "number" && !isFinite(value)) {
@@ -25786,20 +25786,20 @@ namespace ts {
25786
25786
}
25787
25787
return value;
25788
25788
25789
- function evaluate(expr: Expression): string | number | bigint | undefined {
25789
+ function evaluate(expr: Expression): string | number | undefined {
25790
25790
switch (expr.kind) {
25791
25791
case SyntaxKind.PrefixUnaryExpression:
25792
25792
const value = evaluate((<PrefixUnaryExpression>expr).operand);
25793
- if (typeof value === "number" || typeof value === "bigint") {
25793
+ if (typeof value === "number" || typeof value as string === "bigint") {
25794
25794
switch ((<PrefixUnaryExpression>expr).operator) {
25795
25795
case SyntaxKind.PlusToken:
25796
- if (typeof value === "bigint") {
25796
+ if (typeof value as string === "bigint") {
25797
25797
error(expr, Diagnostics.Operator_0_cannot_be_applied_to_type_1, tokenToString(SyntaxKind.PlusToken), typeToString(bigintType));
25798
25798
return undefined;
25799
25799
}
25800
25800
return value;
25801
- case SyntaxKind.MinusToken: return -value;
25802
- case SyntaxKind.TildeToken: return ~value;
25801
+ case SyntaxKind.MinusToken: return -<number> value;
25802
+ case SyntaxKind.TildeToken: return ~<number> value;
25803
25803
}
25804
25804
}
25805
25805
break;
@@ -25822,19 +25822,19 @@ namespace ts {
25822
25822
case SyntaxKind.AsteriskAsteriskToken: return left ** right;
25823
25823
}
25824
25824
}
25825
- else if (typeof left === "bigint" && typeof right === "bigint") {
25825
+ else if (typeof left as string === "bigint" && typeof right as string === "bigint") {
25826
25826
switch ((<BinaryExpression>expr).operatorToken.kind) {
25827
- case SyntaxKind.BarToken: return left | right;
25828
- case SyntaxKind.AmpersandToken: return left & right;
25829
- case SyntaxKind.GreaterThanGreaterThanToken: return left >> right;
25830
- case SyntaxKind.LessThanLessThanToken: return left << right;
25831
- case SyntaxKind.CaretToken: return left ^ right;
25832
- case SyntaxKind.AsteriskToken: return left * right;
25833
- case SyntaxKind.SlashToken: return left / right;
25834
- case SyntaxKind.PlusToken: return left + right;
25835
- case SyntaxKind.MinusToken: return left - right;
25836
- case SyntaxKind.PercentToken: return left % right;
25837
- case SyntaxKind.AsteriskAsteriskToken: return left ** right;
25827
+ case SyntaxKind.BarToken: return <number> left | <number> right;
25828
+ case SyntaxKind.AmpersandToken: return <number> left & <number> right;
25829
+ case SyntaxKind.GreaterThanGreaterThanToken: return <number> left >> <number> right;
25830
+ case SyntaxKind.LessThanLessThanToken: return <number> left << <number> right;
25831
+ case SyntaxKind.CaretToken: return <number> left ^ <number> right;
25832
+ case SyntaxKind.AsteriskToken: return <number> left * <number> right;
25833
+ case SyntaxKind.SlashToken: return <number> left / <number> right;
25834
+ case SyntaxKind.PlusToken: return <number> left + <number> right;
25835
+ case SyntaxKind.MinusToken: return <number> left - <number> right;
25836
+ case SyntaxKind.PercentToken: return <number> left % <number> right;
25837
+ case SyntaxKind.AsteriskAsteriskToken: return (<number> left) ** <number> right;
25838
25838
}
25839
25839
}
25840
25840
else if (typeof left === "string" && typeof right === "string" && (<BinaryExpression>expr).operatorToken.kind === SyntaxKind.PlusToken) {
0 commit comments