Skip to content

Commit a18fe4d

Browse files
committed
Update for newer literal types
1 parent 439394b commit a18fe4d

File tree

3 files changed

+18
-26
lines changed

3 files changed

+18
-26
lines changed

src/compiler/checker.ts

+4-11
Original file line numberDiff line numberDiff line change
@@ -264,22 +264,15 @@ namespace ts {
264264
getESSymbolType: () => esSymbolType,
265265
getNeverType: () => neverType,
266266
getUnknownType: () => unknownType,
267-
getStringLiteralType: (text: string) => {
267+
getLiteralType: (literal: string | number) => {
268268
/* tslint:disable:no-null-keyword */
269-
Debug.assert(text !== undefined && text !== null);
269+
Debug.assert(literal !== undefined && literal !== null);
270270
/* tslint:enable:no-null-keyword */
271-
return getLiteralTypeForText(TypeFlags.StringLiteral, "" + text);
272-
},
273-
getNumberLiteralType: (text: string) => {
274-
/* tslint:disable:no-null-keyword */
275-
Debug.assert(text !== undefined && text !== null);
276-
/* tslint:enable:no-null-keyword */
277-
Debug.assert(typeof text === "string" || typeof text === "number"); // While not formally part of the function signature, allow coercions from numbers
278-
return getLiteralTypeForText(TypeFlags.NumberLiteral, "" + text);
271+
Debug.assert(typeof literal === "string" || typeof literal === "number");
272+
return getLiteralType(literal);
279273
},
280274
getFalseType: () => falseType,
281275
getTrueType: () => trueType,
282-
>>>>>>> Add type relationship functions to checker api
283276
};
284277

285278
const tupleTypes: GenericType[] = [];

src/compiler/types.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -2718,8 +2718,7 @@ namespace ts {
27182718
getESSymbolType(): Type;
27192719
getNeverType(): Type;
27202720
getUnknownType(): Type;
2721-
getStringLiteralType(text: string): LiteralType;
2722-
getNumberLiteralType(text: string): LiteralType;
2721+
getLiteralType(content: string | number): LiteralType;
27232722
getFalseType(): Type;
27242723
getTrueType(): Type;
27252724

src/harness/unittests/checkerPublicRelationships.ts

+13-13
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ namespace ts {
2323
}
2424
const xs: number[] = [1,2,3];
2525
`
26-
}], () => void 0, ScriptTarget.ES3, /*useCaseSensitiveFileNames*/true, "", NewLineKind.CarriageReturnLineFeed);
26+
}], () => void 0, ScriptTarget.ES3, /*useCaseSensitiveFileNames*/ true, "", NewLineKind.CarriageReturnLineFeed);
2727
program = ts.createProgram(["test.ts"], ts.defaultInitCompilerOptions, host);
2828
const diag = ts.getPreEmitDiagnostics(program);
2929
if (diag.length) {
@@ -87,42 +87,42 @@ namespace ts {
8787
});
8888

8989
it("can get string literal types", () => {
90-
assert((checker.getStringLiteralType("foobar") as LiteralType).text === "foobar");
90+
assert((checker.getLiteralType("foobar") as LiteralType).value === "foobar");
9191
});
9292

9393
it("can get numeber literal types", () => {
94-
assert((checker.getNumberLiteralType("42") as LiteralType).text === "42");
94+
assert((checker.getLiteralType(42) as LiteralType).value === "42");
9595
});
9696

9797
it("doesn't choke on exceptional input to literal type getters", () => {
98-
assert.equal((checker.getStringLiteralType("") as LiteralType).text, "");
99-
assert.throws(() => checker.getStringLiteralType(undefined), Error, "Debug Failure. False expression:");
98+
assert.equal((checker.getLiteralType("") as LiteralType).value, "");
99+
assert.throws(() => checker.getLiteralType(/*content*/ undefined), Error, "Debug Failure. False expression:");
100100
/* tslint:disable:no-null-keyword */
101-
assert.throws(() => checker.getStringLiteralType(null), Error, "Debug Failure. False expression:");
101+
assert.throws(() => checker.getLiteralType(/*content*/ null), Error, "Debug Failure. False expression:");
102102
/* tslint:enable:no-null-keyword */
103103
let hugeStringLiteral = map(new Array(2 ** 16 - 1), () => "a").join();
104-
assert.equal((checker.getStringLiteralType(hugeStringLiteral) as LiteralType).text, hugeStringLiteral);
104+
assert.equal((checker.getLiteralType(hugeStringLiteral) as LiteralType).value, hugeStringLiteral);
105105
hugeStringLiteral = undefined;
106106

107107

108-
assert.throws(() => checker.getNumberLiteralType(undefined), Error, "Debug Failure. False expression:");
108+
assert.throws(() => checker.getLiteralType(/*content*/ undefined), Error, "Debug Failure. False expression:");
109109
/* tslint:disable:no-null-keyword */
110-
assert.throws(() => checker.getNumberLiteralType(null), Error, "Debug Failure. False expression:");
110+
assert.throws(() => checker.getLiteralType(/*content*/ null), Error, "Debug Failure. False expression:");
111111
/* tslint:enable:no-null-keyword */
112112

113113
const sanityChecks = ["000", "0b0", "0x0", "0.0", "0e-0", "-010", "-0b10", "-0x10", "-0o10", "-10.0", "-1e-1", "NaN", "Infinity", "-Infinity"];
114114
forEach(sanityChecks, num => {
115-
assert.equal((checker.getNumberLiteralType(num) as LiteralType).text, num, `${num} did not match.`);
115+
assert.equal((checker.getLiteralType(num) as LiteralType).value, num, `${num} did not match.`);
116116
});
117117

118118
const insanityChecks = [[0, "0"], [0b0, "0"], [-10, "-10"], [NaN, "NaN"], [Infinity, "Infinity"], [-Infinity, "-Infinity"]];
119119
forEach(insanityChecks, ([num, expected]) => {
120-
assert.equal((checker.getNumberLiteralType(num as any) as LiteralType).text, expected, `${JSON.stringify(num)} should be ${expected}`);
120+
assert.equal((checker.getLiteralType(num as any) as LiteralType).value, expected, `${JSON.stringify(num)} should be ${expected}`);
121121
});
122122

123123
const instabilityChecks = [{ foo: 42 }, new Date(42), [42], new Number(42), new String("42")];
124124
forEach(instabilityChecks, (bad) => {
125-
assert.throws(() => checker.getNumberLiteralType(bad as any));
125+
assert.throws(() => checker.getLiteralType(bad as any));
126126
});
127127
});
128128

@@ -152,7 +152,7 @@ namespace ts {
152152
assert.notEqual(checker.lookupGlobalType("Function"), innerFunction, "Inner function type should be different than global");
153153
const brandNameType = checker.getTypeOfSymbol(innerFunction.getProperty("myBrand"));
154154
assert.notEqual(brandNameType, checker.getUnknownType(), "Brand type on inner function should not be unknown");
155-
assert.equal(brandNameType, checker.getNumberLiteralType("42"), "Brand type should be 42");
155+
assert.equal(brandNameType, checker.getLiteralType(42), "Brand type should be 42");
156156

157157
let skipped = false;
158158
const functionBody2 = forEachChild(program.getSourceFile("test.ts"), node => node.kind === SyntaxKind.FunctionDeclaration ? skipped ? (node as FunctionDeclaration) : (skipped = true, undefined) : undefined).body;

0 commit comments

Comments
 (0)