summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2021-03-14 22:19:27 +0000
committerGitHub <noreply@github.com>2021-03-15 09:19:27 +1100
commitc4709834b37640fd3c9d492123e6add904546573 (patch)
tree238dc10a985f04709437b6e5d74bc90d98495a51
parent7286eea75c991dd12cbe5f124f5037a93de1ce43 (diff)
fix(cli/module_graph): Set useDefineForClassFields to true (#9774)
Fixes #9773
-rw-r--r--cli/lsp/language_server.rs1
-rw-r--r--cli/module_graph.rs2
-rw-r--r--cli/tests/088_use_define_for_class_fields.ts4
-rw-r--r--cli/tests/088_use_define_for_class_fields.ts.out4
-rw-r--r--cli/tests/integration_tests.rs6
-rw-r--r--cli/tsc_config.rs1
6 files changed, 18 insertions, 0 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs
index 96983dc52..cf4a95d38 100644
--- a/cli/lsp/language_server.rs
+++ b/cli/lsp/language_server.rs
@@ -314,6 +314,7 @@ impl Inner {
"noEmit": true,
"strict": true,
"target": "esnext",
+ "useDefineForClassFields": true,
}));
let (maybe_config, maybe_root_uri) = {
let config = &self.config;
diff --git a/cli/module_graph.rs b/cli/module_graph.rs
index ad6d01589..ddfc3ad84 100644
--- a/cli/module_graph.rs
+++ b/cli/module_graph.rs
@@ -809,6 +809,7 @@ impl Graph {
"strict": true,
"target": "esnext",
"tsBuildInfoFile": "deno:///.tsbuildinfo",
+ "useDefineForClassFields": true,
}));
if options.emit {
config.merge(&json!({
@@ -954,6 +955,7 @@ impl Graph {
"module": "esnext",
"strict": true,
"target": "esnext",
+ "useDefineForClassFields": true,
}));
let opts = match options.bundle_type {
BundleType::Esm | BundleType::Iife => json!({
diff --git a/cli/tests/088_use_define_for_class_fields.ts b/cli/tests/088_use_define_for_class_fields.ts
new file mode 100644
index 000000000..9be984abf
--- /dev/null
+++ b/cli/tests/088_use_define_for_class_fields.ts
@@ -0,0 +1,4 @@
+class A {
+ b = this.a;
+ constructor(public a: unknown) {}
+}
diff --git a/cli/tests/088_use_define_for_class_fields.ts.out b/cli/tests/088_use_define_for_class_fields.ts.out
new file mode 100644
index 000000000..08f94a967
--- /dev/null
+++ b/cli/tests/088_use_define_for_class_fields.ts.out
@@ -0,0 +1,4 @@
+[WILDCARD]error: TS2729 [ERROR]: Property 'a' is used before its initialization.
+ b = this.a;
+ ^
+[WILDCARD]
diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs
index 23d119d44..cddeb40f6 100644
--- a/cli/tests/integration_tests.rs
+++ b/cli/tests/integration_tests.rs
@@ -2841,6 +2841,12 @@ console.log("finish");
output: "087_no_check_imports_not_used_as_values.ts.out",
});
+ itest!(_088_use_define_for_class_fields {
+ args: "run 088_use_define_for_class_fields.ts",
+ output: "088_use_define_for_class_fields.ts.out",
+ exit_code: 1,
+ });
+
itest!(js_import_detect {
args: "run --quiet --reload js_import_detect.ts",
output: "js_import_detect.ts.out",
diff --git a/cli/tsc_config.rs b/cli/tsc_config.rs
index 54ed34bf1..a3db12006 100644
--- a/cli/tsc_config.rs
+++ b/cli/tsc_config.rs
@@ -130,6 +130,7 @@ pub const IGNORED_RUNTIME_COMPILER_OPTIONS: &[&str] = &[
"traceResolution",
"tsBuildInfoFile",
"typeRoots",
+ "useDefineForClassFields",
"version",
"watch",
];