Skip to content

Commit 75507b9

Browse files
Do not print initializer if node already has a type annotation.
1 parent 0f53db0 commit 75507b9

4 files changed

+29
-33
lines changed

src/compiler/transformers/declarations.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import {
4141
EnumDeclaration,
4242
ExportAssignment,
4343
ExportDeclaration,
44+
Expression,
4445
ExpressionWithTypeArguments,
4546
factory,
4647
FileReference,
@@ -666,7 +667,7 @@ export function transformDeclarations(context: TransformationContext) {
666667
elem.dotDotDotToken,
667668
elem.propertyName,
668669
filterBindingPatternInitializers(elem.name),
669-
shouldPrintWithInitializer(elem) ? elem.initializer : undefined,
670+
/*initializer*/ undefined,
670671
);
671672
}
672673
}
@@ -692,8 +693,11 @@ export function transformDeclarations(context: TransformationContext) {
692693
return newParam;
693694
}
694695

695-
function shouldPrintWithInitializer(node: Node) {
696-
return canHaveLiteralInitializer(node) && resolver.isLiteralConstDeclaration(getParseTreeNode(node) as CanHaveLiteralInitializer); // TODO: Make safe
696+
function shouldPrintWithInitializer(node: Node): node is CanHaveLiteralInitializer & { initializer: Expression; } {
697+
return canHaveLiteralInitializer(node)
698+
&& !node.type
699+
&& !!node.initializer
700+
&& resolver.isLiteralConstDeclaration(getParseTreeNode(node) as CanHaveLiteralInitializer); // TODO: Make safe
697701
}
698702

699703
function ensureNoInitializer(node: CanHaveLiteralInitializer) {
@@ -1937,7 +1941,7 @@ function getTypeAnnotationFromAccessor(accessor: AccessorDeclaration): TypeNode
19371941
}
19381942

19391943
type CanHaveLiteralInitializer = VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration;
1940-
function canHaveLiteralInitializer(node: Node): boolean {
1944+
function canHaveLiteralInitializer(node: Node): node is CanHaveLiteralInitializer {
19411945
switch (node.kind) {
19421946
case SyntaxKind.PropertyDeclaration:
19431947
case SyntaxKind.PropertySignature:

tests/baselines/reference/tsc/incremental/change-to-type-that-gets-used-as-global-through-export-in-another-file-through-indirect-import.js

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ exitCode:: ExitStatus.Success
4343

4444

4545
//// [/src/project/class1.d.ts]
46-
declare const a = 1;
46+
declare const a: MagicNumber;
4747

4848

4949
//// [/src/project/class1.js]
@@ -75,7 +75,7 @@ Object.defineProperty(exports, "ConstantNumber", { enumerable: true, get: functi
7575

7676

7777
//// [/src/project/tsconfig.tsbuildinfo]
78-
{"program":{"fileNames":["../../lib/lib.d.ts","./class1.ts","./constants.ts","./reexport.ts","./types.d.ts"],"fileInfos":[{"version":"3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},{"version":"4085502068-const a: MagicNumber = 1;\nconsole.log(a);","signature":"-3664763344-declare const a = 1;\n","affectsGlobalScope":true},{"version":"-2659799048-export default 1;","signature":"-183154784-declare const _default: 1;\nexport default _default;\n"},{"version":"-1476032387-export { default as ConstantNumber } from \"./constants\"","signature":"-1081498782-export { default as ConstantNumber } from \"./constants\";\n"},{"version":"2093085814-type MagicNumber = typeof import('./reexport').ConstantNumber","affectsGlobalScope":true}],"root":[[2,5]],"options":{"composite":true},"fileIdsList":[[3],[4]],"referencedMap":[[4,1],[5,2]],"exportedModulesMap":[[4,1],[5,2]],"semanticDiagnosticsPerFile":[1,2,3,4,5],"latestChangedDtsFile":"./reexport.d.ts"},"version":"FakeTSVersion"}
78+
{"program":{"fileNames":["../../lib/lib.d.ts","./class1.ts","./constants.ts","./reexport.ts","./types.d.ts"],"fileInfos":[{"version":"3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},{"version":"4085502068-const a: MagicNumber = 1;\nconsole.log(a);","signature":"-2630403130-declare const a: MagicNumber;\n","affectsGlobalScope":true},{"version":"-2659799048-export default 1;","signature":"-183154784-declare const _default: 1;\nexport default _default;\n"},{"version":"-1476032387-export { default as ConstantNumber } from \"./constants\"","signature":"-1081498782-export { default as ConstantNumber } from \"./constants\";\n"},{"version":"2093085814-type MagicNumber = typeof import('./reexport').ConstantNumber","affectsGlobalScope":true}],"root":[[2,5]],"options":{"composite":true},"fileIdsList":[[3],[4]],"referencedMap":[[4,1],[5,2]],"exportedModulesMap":[[4,1],[5,2]],"semanticDiagnosticsPerFile":[1,2,3,4,5],"latestChangedDtsFile":"./reexport.d.ts"},"version":"FakeTSVersion"}
7979

8080
//// [/src/project/tsconfig.tsbuildinfo.readable.baseline.txt]
8181
{
@@ -108,11 +108,11 @@ Object.defineProperty(exports, "ConstantNumber", { enumerable: true, get: functi
108108
"./class1.ts": {
109109
"original": {
110110
"version": "4085502068-const a: MagicNumber = 1;\nconsole.log(a);",
111-
"signature": "-3664763344-declare const a = 1;\n",
111+
"signature": "-2630403130-declare const a: MagicNumber;\n",
112112
"affectsGlobalScope": true
113113
},
114114
"version": "4085502068-const a: MagicNumber = 1;\nconsole.log(a);",
115-
"signature": "-3664763344-declare const a = 1;\n",
115+
"signature": "-2630403130-declare const a: MagicNumber;\n",
116116
"affectsGlobalScope": true
117117
},
118118
"./constants.ts": {
@@ -184,7 +184,7 @@ Object.defineProperty(exports, "ConstantNumber", { enumerable: true, get: functi
184184
"latestChangedDtsFile": "./reexport.d.ts"
185185
},
186186
"version": "FakeTSVersion",
187-
"size": 1395
187+
"size": 1404
188188
}
189189

190190

@@ -209,10 +209,6 @@ Found 1 error in src/project/class1.ts:1
209209
exitCode:: ExitStatus.DiagnosticsPresent_OutputsGenerated
210210

211211

212-
//// [/src/project/class1.d.ts]
213-
declare const a = 2;
214-
215-
216212
//// [/src/project/constants.d.ts]
217213
declare const _default: 2;
218214
export default _default;
@@ -226,7 +222,7 @@ exports.default = 2;
226222

227223
//// [/src/project/reexport.js] file written with same contents
228224
//// [/src/project/tsconfig.tsbuildinfo]
229-
{"program":{"fileNames":["../../lib/lib.d.ts","./class1.ts","./constants.ts","./reexport.ts","./types.d.ts"],"fileInfos":[{"version":"3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},{"version":"4085502068-const a: MagicNumber = 1;\nconsole.log(a);","signature":"-3664762255-declare const a = 2;\n","affectsGlobalScope":true},{"version":"-2659799015-export default 2;","signature":"-10876795135-declare const _default: 2;\nexport default _default;\n"},{"version":"-1476032387-export { default as ConstantNumber } from \"./constants\"","signature":"-1081498782-export { default as ConstantNumber } from \"./constants\";\n"},{"version":"2093085814-type MagicNumber = typeof import('./reexport').ConstantNumber","affectsGlobalScope":true}],"root":[[2,5]],"options":{"composite":true},"fileIdsList":[[3],[4]],"referencedMap":[[4,1],[5,2]],"exportedModulesMap":[[4,1],[5,2]],"semanticDiagnosticsPerFile":[1,[2,[{"file":"./class1.ts","start":6,"length":1,"code":2322,"category":1,"messageText":"Type '1' is not assignable to type '2'."}]],3,4,5],"latestChangedDtsFile":"./class1.d.ts"},"version":"FakeTSVersion"}
225+
{"program":{"fileNames":["../../lib/lib.d.ts","./class1.ts","./constants.ts","./reexport.ts","./types.d.ts"],"fileInfos":[{"version":"3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},{"version":"4085502068-const a: MagicNumber = 1;\nconsole.log(a);","signature":"-2630403130-declare const a: MagicNumber;\n","affectsGlobalScope":true},{"version":"-2659799015-export default 2;","signature":"-10876795135-declare const _default: 2;\nexport default _default;\n"},{"version":"-1476032387-export { default as ConstantNumber } from \"./constants\"","signature":"-1081498782-export { default as ConstantNumber } from \"./constants\";\n"},{"version":"2093085814-type MagicNumber = typeof import('./reexport').ConstantNumber","affectsGlobalScope":true}],"root":[[2,5]],"options":{"composite":true},"fileIdsList":[[3],[4]],"referencedMap":[[4,1],[5,2]],"exportedModulesMap":[[4,1],[5,2]],"semanticDiagnosticsPerFile":[1,[2,[{"file":"./class1.ts","start":6,"length":1,"code":2322,"category":1,"messageText":"Type '1' is not assignable to type '2'."}]],3,4,5],"latestChangedDtsFile":"./constants.d.ts"},"version":"FakeTSVersion"}
230226

231227
//// [/src/project/tsconfig.tsbuildinfo.readable.baseline.txt]
232228
{
@@ -259,11 +255,11 @@ exports.default = 2;
259255
"./class1.ts": {
260256
"original": {
261257
"version": "4085502068-const a: MagicNumber = 1;\nconsole.log(a);",
262-
"signature": "-3664762255-declare const a = 2;\n",
258+
"signature": "-2630403130-declare const a: MagicNumber;\n",
263259
"affectsGlobalScope": true
264260
},
265261
"version": "4085502068-const a: MagicNumber = 1;\nconsole.log(a);",
266-
"signature": "-3664762255-declare const a = 2;\n",
262+
"signature": "-2630403130-declare const a: MagicNumber;\n",
267263
"affectsGlobalScope": true
268264
},
269265
"./constants.ts": {
@@ -344,9 +340,9 @@ exports.default = 2;
344340
"./reexport.ts",
345341
"./types.d.ts"
346342
],
347-
"latestChangedDtsFile": "./class1.d.ts"
343+
"latestChangedDtsFile": "./constants.d.ts"
348344
},
349345
"version": "FakeTSVersion",
350-
"size": 1524
346+
"size": 1536
351347
}
352348

tests/baselines/reference/tsc/incremental/change-to-type-that-gets-used-as-global-through-export-in-another-file.js

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ exitCode:: ExitStatus.Success
4040

4141

4242
//// [/src/project/class1.d.ts]
43-
declare const a = 1;
43+
declare const a: MagicNumber;
4444

4545

4646
//// [/src/project/class1.js]
@@ -60,7 +60,7 @@ exports.default = 1;
6060

6161

6262
//// [/src/project/tsconfig.tsbuildinfo]
63-
{"program":{"fileNames":["../../lib/lib.d.ts","./class1.ts","./constants.ts","./types.d.ts"],"fileInfos":[{"version":"3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},{"version":"4085502068-const a: MagicNumber = 1;\nconsole.log(a);","signature":"-3664763344-declare const a = 1;\n","affectsGlobalScope":true},{"version":"-2659799048-export default 1;","signature":"-183154784-declare const _default: 1;\nexport default _default;\n"},{"version":"-2080821236-type MagicNumber = typeof import('./constants').default","affectsGlobalScope":true}],"root":[[2,4]],"options":{"composite":true},"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[[4,1]],"semanticDiagnosticsPerFile":[1,2,3,4],"latestChangedDtsFile":"./constants.d.ts"},"version":"FakeTSVersion"}
63+
{"program":{"fileNames":["../../lib/lib.d.ts","./class1.ts","./constants.ts","./types.d.ts"],"fileInfos":[{"version":"3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},{"version":"4085502068-const a: MagicNumber = 1;\nconsole.log(a);","signature":"-2630403130-declare const a: MagicNumber;\n","affectsGlobalScope":true},{"version":"-2659799048-export default 1;","signature":"-183154784-declare const _default: 1;\nexport default _default;\n"},{"version":"-2080821236-type MagicNumber = typeof import('./constants').default","affectsGlobalScope":true}],"root":[[2,4]],"options":{"composite":true},"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[[4,1]],"semanticDiagnosticsPerFile":[1,2,3,4],"latestChangedDtsFile":"./constants.d.ts"},"version":"FakeTSVersion"}
6464

6565
//// [/src/project/tsconfig.tsbuildinfo.readable.baseline.txt]
6666
{
@@ -89,11 +89,11 @@ exports.default = 1;
8989
"./class1.ts": {
9090
"original": {
9191
"version": "4085502068-const a: MagicNumber = 1;\nconsole.log(a);",
92-
"signature": "-3664763344-declare const a = 1;\n",
92+
"signature": "-2630403130-declare const a: MagicNumber;\n",
9393
"affectsGlobalScope": true
9494
},
9595
"version": "4085502068-const a: MagicNumber = 1;\nconsole.log(a);",
96-
"signature": "-3664763344-declare const a = 1;\n",
96+
"signature": "-2630403130-declare const a: MagicNumber;\n",
9797
"affectsGlobalScope": true
9898
},
9999
"./constants.ts": {
@@ -149,7 +149,7 @@ exports.default = 1;
149149
"latestChangedDtsFile": "./constants.d.ts"
150150
},
151151
"version": "FakeTSVersion",
152-
"size": 1186
152+
"size": 1195
153153
}
154154

155155

@@ -174,10 +174,6 @@ Found 1 error in src/project/class1.ts:1
174174
exitCode:: ExitStatus.DiagnosticsPresent_OutputsGenerated
175175

176176

177-
//// [/src/project/class1.d.ts]
178-
declare const a = 2;
179-
180-
181177
//// [/src/project/constants.d.ts]
182178
declare const _default: 2;
183179
export default _default;
@@ -190,7 +186,7 @@ exports.default = 2;
190186

191187

192188
//// [/src/project/tsconfig.tsbuildinfo]
193-
{"program":{"fileNames":["../../lib/lib.d.ts","./class1.ts","./constants.ts","./types.d.ts"],"fileInfos":[{"version":"3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},{"version":"4085502068-const a: MagicNumber = 1;\nconsole.log(a);","signature":"-3664762255-declare const a = 2;\n","affectsGlobalScope":true},{"version":"-2659799015-export default 2;","signature":"-10876795135-declare const _default: 2;\nexport default _default;\n"},{"version":"-2080821236-type MagicNumber = typeof import('./constants').default","affectsGlobalScope":true}],"root":[[2,4]],"options":{"composite":true},"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[[4,1]],"semanticDiagnosticsPerFile":[1,[2,[{"file":"./class1.ts","start":6,"length":1,"code":2322,"category":1,"messageText":"Type '1' is not assignable to type '2'."}]],3,4],"latestChangedDtsFile":"./class1.d.ts"},"version":"FakeTSVersion"}
189+
{"program":{"fileNames":["../../lib/lib.d.ts","./class1.ts","./constants.ts","./types.d.ts"],"fileInfos":[{"version":"3858781397-/// <reference no-default-lib=\"true\"/>\ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array<T> { length: number; [n: number]: T; }\ninterface ReadonlyArray<T> {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},{"version":"4085502068-const a: MagicNumber = 1;\nconsole.log(a);","signature":"-2630403130-declare const a: MagicNumber;\n","affectsGlobalScope":true},{"version":"-2659799015-export default 2;","signature":"-10876795135-declare const _default: 2;\nexport default _default;\n"},{"version":"-2080821236-type MagicNumber = typeof import('./constants').default","affectsGlobalScope":true}],"root":[[2,4]],"options":{"composite":true},"fileIdsList":[[3]],"referencedMap":[[4,1]],"exportedModulesMap":[[4,1]],"semanticDiagnosticsPerFile":[1,[2,[{"file":"./class1.ts","start":6,"length":1,"code":2322,"category":1,"messageText":"Type '1' is not assignable to type '2'."}]],3,4],"latestChangedDtsFile":"./constants.d.ts"},"version":"FakeTSVersion"}
194190

195191
//// [/src/project/tsconfig.tsbuildinfo.readable.baseline.txt]
196192
{
@@ -219,11 +215,11 @@ exports.default = 2;
219215
"./class1.ts": {
220216
"original": {
221217
"version": "4085502068-const a: MagicNumber = 1;\nconsole.log(a);",
222-
"signature": "-3664762255-declare const a = 2;\n",
218+
"signature": "-2630403130-declare const a: MagicNumber;\n",
223219
"affectsGlobalScope": true
224220
},
225221
"version": "4085502068-const a: MagicNumber = 1;\nconsole.log(a);",
226-
"signature": "-3664762255-declare const a = 2;\n",
222+
"signature": "-2630403130-declare const a: MagicNumber;\n",
227223
"affectsGlobalScope": true
228224
},
229225
"./constants.ts": {
@@ -288,9 +284,9 @@ exports.default = 2;
288284
"./constants.ts",
289285
"./types.d.ts"
290286
],
291-
"latestChangedDtsFile": "./class1.d.ts"
287+
"latestChangedDtsFile": "./constants.d.ts"
292288
},
293289
"version": "FakeTSVersion",
294-
"size": 1314
290+
"size": 1326
295291
}
296292

tests/baselines/reference/verbatim-declarations-literals.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ const noSubstTemplateIndirect = noSubstTemplate;
5858
declare enum E {
5959
"some value" = 1
6060
}
61-
declare const e = E["some value"];
61+
declare const e: typeof E["some value"];
6262
declare function f3<T>(a: T, b: T): T;
6363
declare const x3: "abc" | "def";
6464
declare const octal = 14;

0 commit comments

Comments
 (0)